首页 > 解决方案 > Pandas:导入多个 CSV 文件并追加在一起,使元素按照时间索引排列

问题描述

我有数百个来自不同传感器数据点的 CSV 文件。他们每小时测量一次能量流。它们全年错开安装,因此每个数据文件的开始日期和时间都不同。

最终结果将是一个按日期和时间 (MM-DD-YYYY HH:MM:SS) 为全年编制索引的 Excel 文件。每个新的水平列将包含一个传感器的数据集。我需要每个传感器的数据与最终的 Excel 文件时间索引对齐。我想用零填充缺失的元素,在安装传感器之前数据不存在。

传感器 1 CSV 数据文件示例:

METER_ID, INTERVAL_DATE, INTERVAL_TIME, ENERGY
CC12345, 2/13/2019, 9:00:00, 1.332
CC12345, 2/13/2019, 10:00:00, 0.728
CC12345, 2/13/2019, 11:00:00, 1.583
CC12345, 2/13/2019, 12:00:00, 1.136
CC12345, 2/13/2019, 13:00:00, 0.888
CC12345, 2/13/2019, 14:00:00, 1.240
...

传感器 2 CSV 数据文件示例:

METER_ID, INTERVAL_DATE, INTERVAL_TIME, ENERGY
AA98765, 2/13/2019, 12:00:00, 0.498
AA98765, 2/13/2019, 13:00:00, 0.517
AA98765, 2/13/2019, 14:00:00, 1.223
...

...后来有数百个传感器文件...

最终结果将在 Excel 文件中,如下所示:

DATETIME,          CC12345, AA98765, ... 
1/1/2019 00:00:00, 0.000,   0.000
1/1/2019 01:00:00, 0.000,   0.000
1/1/2019 02:00:00, 0.000,   0.000
...
2/13/2019 09:00:00, 1.332,   0.000
2/13/2019 10:00:00, 0.728,   0.000
2/13/2019 11:00:00, 1.583,   0.000
2/13/2019 12:00:00, 1.136,   0.498
2/13/2019 13:00:00, 0.888,   0.517
2/13/2019 14:00:00, 1.240,   1.223
...
12/31/2019 23:00:00, ...

我是 Python 和 Pandas 的新手,到目前为止,这是我从其他 Stack Exchange 答案中总结出来的。我被卡住了,不知道我是否过于复杂了,或者是否已经有更简单的方法或程序可以做到这一点。

import os
import pandas as pd
import glob
import numpy as np
from pandas import ExcelWriter

path = 'C:\\Users\\CMBel\\Python Scripts'
allFiles = glob.glob(os.path.join(path,'*.csv'))    
importColumnFields=['METER_ID','INTERVAL_DATE','INTERVAL_TIME','ENERGY']
newDateIDX=pd.date_range(start='1/1/2019 00:00:00',end='12/31/2019 23:00:00',freq='H')


np_array_list = []
for file_ in allFiles:
    df = pd.read_csv(file_, skipinitialspace=True, usecols=importColumnFields, parse_dates=[[2,3]]) #import files and parse INTERVAL_DATE and INTERVAL_TIME together
    df = df.reindex(newDateIDX, fill_value=0)  #Re-index to the final Excel's year long index

    # ?? Not sure where to go from here or if I am on the right track

    np_array_list.append(df.as_matrix(),axis=1)  #Append new ENERGY columns horizontally

np_array_list.to_excel('TestExport.xlsx',index_label='DATETIME')

任何帮助,想法,指针将不胜感激。

标签: python-3.xpandasanaconda

解决方案


首先向每个数据框添加一列。举个简单的例子,我将您的第一个 csv、df1 和第二个 csv 称为 df2。然后将数据集附加在一起。最后,您可以制作数据透视表。这应该让你得到你正在寻找的东西。

#Make datetime
df1['DateTime']=df1['INTERVAL_DATE']+" "+df1['INTERVAL_TIME']
df2['DateTime']=df2['INTERVAL_DATE']+" "+df2['INTERVAL_TIME']
#Append both datasets together
df3=df1.append(df2,ignore_index=True)
df3
#Pivot
pd.pivot_table(df3,values='ENERGY',index='DateTime',columns=['METER_ID']).reset_index()

推荐阅读