2017-03-21 19 views
4

因此,我有3個或更多的數據框將被合併到一個文件中。例如,這將是我的3個數據幀如何在使用python中的熊貓進行連接後爲每個數據幀添加標題標題

  0 100 200 300 400 
03/06/2017 0.0 0.1 0.2 0.4 0.6 
03/07/2017 1.1 4.4 1.0 ND 4.3 

      0 100 200 300 400 
03/06/2017 ND ND ND ND ND 
03/07/2017 4.3 4.2 4.3 ND 4.3 

      0 100 200 300 400 
03/06/2017 0.2 0.5 1.0 0.3 ND 
03/07/2017 4.3 1.1 4.3 ND 4.3 

當組合時,輸出應該有一個頭標題中像下面的例子中,每個數據幀:

    HEADER TITLE1     HEADER TITLE2     HEADER TITLE3 
DATE  0000 0100 0200 0300 0400 0000 0100 0200 0300 0400  0000 0100 0200 0300 0400 
03/06/2017 0.0 0.1 0.2 0.4 0.6  ND ND ND ND ND  0.2 0.5 1.0 0.3 ND 
03/07/2017 1.1 4.4 1.0 ND 4.3  4.3 4.2 4.3 ND 4.3  4.3 1.1 4.3 ND 4.3 

但問題是,當我試圖我的代碼輸出在每個數據幀的每列之上有一個標題標題。我想要的只是每個數據幀1個標題標題。以下是我已經試過:

import pandas as pd 
from decimal import Decimal, ROUND_HALF_UP 

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



df1 = pd.read_csv('Dataframe1.csv') 
df1.Date = pd.to_datetime(df1.Date, dayfirst=True) 
df1 = df1.pivot_table(values='SampleValues',index="SampleIndex",columns='SampleColumns',aggfunc='max',fill_value="ND") 
df1.index = df1.index.map(lambda t: t.strftime('%Y-%m-%d')) 
df1 = df1.reindex_axis(L, axis=1) 
df1.ix[:,pd.isnull(df1).all()] = "ND" 


df2 = pd.read_csv('Dataframe2.csv') 
df2.Date = pd.to_datetime(df2.Date, dayfirst=True) 
df2 = df2.pivot_table(values='SampleValues',index='SampleIndex',columns='SampleColumns',aggfunc='max',fill_value="ND") 
df2.index = df2.index.map(lambda t: t.strftime('%Y-%m-%d')) 
df2 = df2.reindex_axis(L, axis=1) 
df2.ix[:,pd.isnull(df2).all()] = "ND" 

df3 = pd.read_csv('Dataframe3.csv') 
df3.Date = pd.to_datetime(df4.Date, dayfirst=True) 
df3 = df4.pivot_table(values='SampleValues',index='SampleIndex',columns='SampleColumns',aggfunc='max',fill_value="ND") 
df3.index = df4.index.map(lambda t: t.strftime('%Y-%m-%d')) 
df3 = df4.reindex_axis(L, axis=1) 
df3.ix[:,pd.isnull(df4).all()] = "ND" 

keys = ['HEADER TITLE1','HEADER TITLE 2', 'HEADER TITLE 3'] 

df4 = pd.concat([df1,df2,df3], axis = 1, keys = keys).to_csv("Output.csv", header = True, encoding = 'utf-8') 

回答

2
dfs = [d1, d2, d3] 

df_combined = pd.concat(
    [df.rename(columns=lambda x: x.zfill(4)) for df in dfs], 
    keys=['HEADER TITLE{}'.format(i) for i in range(1, len(dfs) + 1)], 
    axis=1 
) 

df_combined 

enter image description here

,爲csv

print(df_combined.to_csv()) 

,HEADER TITLE1,HEADER TITLE1,HEADER TITLE1,HEADER TITLE1,HEADER TITLE1,HEADER TITLE2,HEADER TITLE2,HEADER TITLE2,HEADER TITLE2,HEADER TITLE2,HEADER TITLE3,HEADER TITLE3,HEADER TITLE3,HEADER TITLE3,HEADER TITLE3 
,0000,0100,0200,0300,0400,0000,0100,0200,0300,0400,0000,0100,0200,0300,0400 
03/06/2017,0.0,0.1,0.2,0.4,0.6,ND,ND,ND,ND,ND,0.2,0.5,1.0,0.3,ND 
03/07/2017,1.1,4.4,1.0,ND,4.3,4.3,4.2,4.3,ND,4.3,4.3,1.1,4.3,ND,4.3 

然而,正如@StephenRauch指出......你想要的是不真的csv ...所以,讓我們不要 - csv!

with pd.option_context('display.width', 1000): 
    print(df_combined.__repr__()) 

      HEADER TITLE1      HEADER TITLE2      HEADER TITLE3      
        0000 0100 0200 0300 0400   0000 0100 0200 0300 0400   0000 0100 0200 0300 0400 
03/06/2017   0.0 0.1 0.2 0.4 0.6   ND ND ND ND ND   0.2 0.5 1.0 0.3 ND 
03/07/2017   1.1 4.4 1.0 ND 4.3   4.3 4.2 4.3 ND 4.3   4.3 1.1 4.3 ND 4.3 
+0

的OP想要什麼是不可能的CSV .... –

+0

但+1努力:-) –

+0

@StephenRauch在OSX'SHIFT + CTRL + CMD + 4'讓我在拖動矩形屏幕並捕獲到剪貼板。 – piRSquared

相關問題