微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用python将csv中的值插入另一个在日期和小时内相等的csv

所以,我的程序中有这个问题.我有一个包含此数据的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')

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐