【问题标题】:Merge several dataframes together将多个数据框合并在一起
【发布时间】:2018-06-25 13:46:05
【问题描述】:

我有多个 (n) 行长度可变的数据帧,每个数据帧 3 列。我只想要每个数据框的第一列,所以我使用 df.drop 删除了其他列。
我想将它们合并到一个具有 n 列的数据框中。 我使用 pd.concat 进行合并。

    df1.drop(columns=['col2' ,'col3']).to_csv('df1.csv', sep=';')

    df2.drop(columns=['col2', 'col3']).to_csv('df2.csv', sep=';')

pd.concat([pd.concat([df1.drop(columns=['col2','col3']),
                      df2.drop(columns=['col2','col3'])] ,axis=1)])\
                        .to_csv('merged.csv', sep=';')

它给了我以下输出为 csv 文件:

    col1 (df1)  col1 (df1)
0   0.0 
1   0.055   
2   0.096   
3   0.131   
2074        70.997
2075        71.002
2076        71.065
2077        71.101

所以你看到它只是将列添加为行。例如,第 3 行在第 2 列为空。并且第 1 列中的第 2074 行为空。 我认为axis = 1可以解决这个问题,但它没有。

预期输出:

col1 (df1)        col1 (df1)
0   0.0             70.997
1   0.055           71.002
2   0.096           71.065
3   0.131           71.101

如果我尝试axis = 1, ignoreIndex=True,我的列名将更改为 0 和 1。

【问题讨论】:

    标签: python pandas csv


    【解决方案1】:

    reset_index 和参数 reset_index(drop=True) 创建的 DataFrame 中需要相同的索引值:

    df3 = pd.concat([df1['col1'].reset_index(drop=True), 
                     df2['col1'].reset_index(drop=True)], axis=1)
    df3.columns = ['col1 (df1)','col1 (df2)']
    print (df3)
       col1 (df1)  col1 (df2)
    0       0.000      70.997
    1       0.055      71.002
    2       0.096      71.065
    3       0.131      71.101
    

    【讨论】:

      【解决方案2】:

      将df2的索引更改为与df1相同

      df2.index=df1.index
      df1['col1(df2)']=df2.col1
      df1.rename(columns={'col1':'col1(df1)'})
      Out[7]: 
         col1(df1)  col1(df2)
      0      0.000     70.997
      1      0.055     71.002
      2      0.096     71.065
      3      0.130     71.101
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-08-13
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 2015-04-02
        • 1970-01-01
        • 2015-11-05
        相关资源
        最近更新 更多