2017-03-09 83 views
4

等於日期和小時所以,我的程序中有這個問題。我有一個包含此數據的CSV文件:從csv插入一個值到另一個csv,使用python

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的列DATA的價值:2通過使用DATEHour與CSV:1相匹配。

輸出示例:

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') 

但我無法弄清楚如何插入數據。

回答

0

我認爲你可以使用pivot,通過zfill tocolumn名稱添加0然後reindex_axis1 - columns

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') 
+0

你好,對於遲到的回覆感到抱歉。我怎樣才能在csv文件中編寫索引和頭文件?輸出是隻有數據沒有標題和索引 –

+0

嘗試'df2.to_csv('try.csv',encoding ='utf-8')' – jezrael

+0

我們得到它的工作,但小時標題只有4列'0000 1000 1100 1200' –

相關問題