所以,我的程序中有这个问题.我有一个包含此数据的csv文件:
CSV: 1
- -- 0 100 200 300
06/02/2017 Mon
07/02/2017 Tue
08/02/2017 Wed
和其他csv文件包含:
CSV: 2
Date Hour Data
07/02/2017 200 0.1
06/02/2017 100 2.1
08/02/2017 300 4.1
我要做的是将CSV:2的DATA列的值放到CSV:1,使用DATE和Hour来匹配它.
示例输出:
CSV: Output
- -- 0 100 200 300
06/02/2017 Mon 2.1
07/02/2017 Tue 0.1
08/02/2017 Wed 4.1
这是我的Csv代码:1
import pandas as pd
df1 = pd.read_csv('sample.csv')
date_df1 = df1["Date"]
day_df1 = df1["Day"]
df2 = pd.DataFrame(columns=['-','--','0000','0100','0200','0300','0400','0500','0600'
,'0700','0800','0900','1000','1100','1200','1300'
,'1400','1500','1600','1700','1800','1900','2000'
,'2100','2200','2300'])
df2["-"] = (date_df1.values)
df2["--"] = (day_df1.values)
df2 = df2.drop_duplicates(['-'], keep='first')
df2 = df2.drop_duplicates(['--'], keep='last')
df2.to_csv('try.csv', header=True, index=False, encoding='utf-8')
但我无法弄清楚如何插入数据.
解决方法:
我想你可以使用pivot
,按zfill
tocolumn名称加0,然后reindex_axis
1 – 列:
L=['0000','0100','0200','0300','0400','0500','0600'
,'0700','0800','0900','1000','1100','1200','1300'
,'1400','1500','1600','1700','1800','1900','2000'
,'2100','2200','2300']
df.Date = pd.to_datetime(df.Date, dayfirst=True)
df = df.pivot(index='Date', columns='Hour', values='Data')
df.columns = df.columns.astype(str).str.zfill(4)
df = df.reindex_axis(L, axis=1)
print (df)
Hour 0000 0100 0200 0300 0400 0500 0600 0700 0800 0900 ... \
Date ...
2017-02-06 NaN 2.1 NaN NaN NaN NaN NaN NaN NaN NaN ...
2017-02-07 NaN NaN 0.1 NaN NaN NaN NaN NaN NaN NaN ...
2017-02-08 NaN NaN NaN 4.1 NaN NaN NaN NaN NaN NaN ...
Hour 1400 1500 1600 1700 1800 1900 2000 2100 2200 2300
Date
2017-02-06 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-02-07 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
2017-02-08 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
[3 rows x 24 columns]
也可以在weekday_name
之前添加另一个级别的MultiIndex:
df.index = [df.index, df.index.weekday_name]
df.index.names = ['Date','Days']
print (df)
Hour 0000 0100 0200 0300 0400 0500 0600 0700 0800 \
Date Days
2017-02-06 Monday NaN 2.1 NaN NaN NaN NaN NaN NaN NaN
2017-02-07 Tuesday NaN NaN 0.1 NaN NaN NaN NaN NaN NaN
2017-02-08 Wednesday NaN NaN NaN 4.1 NaN NaN NaN NaN NaN
Hour 0900 ... 1400 1500 1600 1700 1800 1900 2000 \
Date Days ...
2017-02-06 Monday NaN ... NaN NaN NaN NaN NaN NaN NaN
2017-02-07 Tuesday NaN ... NaN NaN NaN NaN NaN NaN NaN
2017-02-08 Wednesday NaN ... NaN NaN NaN NaN NaN NaN NaN
Hour 2100 2200 2300
Date Days
2017-02-06 Monday NaN NaN NaN
2017-02-07 Tuesday NaN NaN NaN
2017-02-08 Wednesday NaN NaN NaN
[3 rows x 24 columns]
写入csv使用to_csv
:
df.to_csv('try.csv', encoding='utf-8')