pandas 多列帶時間戳的Series拼接成DataFrame

背景:
遇到這樣的需求:
將多列這樣以時間戳爲index的Series數據拼接爲整體的DataFrame(只帶有一列index)
數據舉例:
(1)溫度數據

2020-03-20 00:00:00    10.911639
2020-03-20 00:30:00    10.561648
2020-03-20 01:00:00    10.410831
2020-03-20 01:30:00     9.993831
2020-03-20 02:00:00     9.996133
2020-03-20 02:30:00     9.807382
2020-03-20 03:00:00     9.831737
2020-03-20 03:30:00     9.767458
2020-03-20 04:00:00     9.789868
2020-03-20 04:30:00     9.993025
2020-03-20 05:00:00    10.203707
2020-03-20 05:30:00    10.460783
2020-03-20 06:00:00    10.900585
2020-03-20 06:30:00    11.154725
2020-03-20 07:00:00    11.765203
2020-03-20 07:30:00    12.377077
2020-03-20 08:00:00    13.013389
2020-03-20 08:30:00    13.685595
2020-03-20 09:00:00    14.327092
2020-03-20 09:30:00    14.862767
2020-03-20 10:00:00    15.264174

(2) 溼度數據

2020-03-20 00:00:00    30.071777
2020-03-20 00:30:00    31.718174
2020-03-20 01:00:00    32.415719
2020-03-20 01:30:00    33.542252
2020-03-20 02:00:00    33.725316
2020-03-20 02:30:00    34.507023
2020-03-20 03:00:00    34.402693
2020-03-20 03:30:00    35.050728
2020-03-20 04:00:00    35.082839
2020-03-20 04:30:00    34.889389
2020-03-20 05:00:00    34.481423
2020-03-20 05:30:00    33.377774
2020-03-20 06:00:00    31.306436
2020-03-20 06:30:00    30.868772
2020-03-20 07:00:00    29.368311
2020-03-20 07:30:00    27.515762
2020-03-20 08:00:00    24.488863
2020-03-20 08:30:00    22.346596
2020-03-20 09:00:00    19.126895
2020-03-20 09:30:00    17.111340
2020-03-20 10:00:00    13.799469

解決的問題就是:保留一列時間戳作index,把剩下多列的Series.values拼接在一起。
(1)首先,找一組Series作爲第一列,比如溫度,先將series轉換DataFrame:
self.preData[0]表示Series的溫度數據,本文在self.preData列表中存放了5組上面說的Series數據。

 frame = {'Date Time': self.preData[0].index, 'Temperature': self.preData[0].values}
 frame = pd.DataFrame(frame)	# 轉換DataFrame

(2)
將第一列時間戳作爲index

frame['Date Time'] = pd.to_datetime(frame['Date Time'])
frame.set_index('Date Time', inplace=True)

(3) 按列拼接

frame['Humidity'] = self.preData[1].values      # 溫度列的DataFrame,與其他列的Series拼接
frame['Wind'] = self.preData[2].values
frame['WindSpeed'] = self.preData[3].values
frame['itPower'] = self.preData[4].values

因爲列還算少,可直接指定列名。列太多可能要另想辦法,希望對您有幫助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章