python-2.7 – 如何在python中使用pandas连接后为每个数据帧添加标题标题

所以我有3个或更多的数据帧将被合并到一个文件中.例如,这将是我的3个数据帧

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

最佳答案

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

《python-2.7 – 如何在python中使用pandas连接后为每个数据帧添加标题标题》

并为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
点赞