【问题标题】:Merge rows from multiple CSV files into one CSV file and keep same number of columns将多个 CSV 文件中的行合并到一个 CSV 文件中并保持相同的列数
【发布时间】:2020-06-16 11:08:22
【问题描述】:

我有 3 个没有标题的 CSV 文件(用“,”分隔),需要将它们合并到一个文件中:

file1.csv

United Kingdom     John

file2.csv

France  Pierre

file3.csv

Italy   Marco

预期结果:

United Kingdom    John
France            Pierre
Italy             Marco

我的代码:

import pandas as pd

df = pd.read_csv('path/to/file1.csv', sep=',')
df1 = pd.read_csv('path/to/file2.csv', sep=',')
df2 = pd.read_csv('path/to/file3.csv', sep=',')

df_combined = pd.concat([df,df1,df2])

df_combined.to_csv('path/to/output.csv')

上面给了我合并的数据,但它从我的 CSV 文件中添加了行作为新的列和行,而不是只向现有的两列添加新行:

United Kingdom     John
                          France     Pierre
                                               Italy    Marco

有人可以帮忙吗?提前谢谢!

【问题讨论】:

  • 您确定 csv 文件中的字段分隔符是逗号并且您的读取正确吗?你的 df, df1 和 df2 在 concat 之前的形状是什么?在我看来,您正在读取 csv 内容作为列名而不是数据本身(如果没有列标题,请使用 header = None)
  • 嗨 predmod,当我在 python 中打印每个 df 时,它显示相同的列数并检查行是否被逗号分隔。除了 pandas 之外,是否还有其他方式来合并/连接行?
  • concat 方法应该可以正常工作并且是正确的方法(您也可以使用框架的附加),但是在您的情况下某些内容没有正确绑定(索引已关闭?) - 的列名是什么df, df1, df2 ? print(df.columns) ...您还可以打印 df.shape 元组。我怀疑您将第一行作为列名导入(您需要在 read_csv 中使用header=None 参数)

标签: python pandas csv


【解决方案1】:

Pandas 通常在读取 CSV 文件时从第一行推断列名。您可以在这里做的一件事是检查每个数据帧的标头,您应该期望看到示例数据被视为标头。

为了覆盖此默认行为,您可以使用names 字段显式指定列名,例如df1=pd.read_csv("file1.csv", names=['country','name'])。然后 pandas 将能够相应地合并列。

【讨论】:

    【解决方案2】:

    如下读取csv

    df = pd.read_csv('path/to/file1.csv', sep=',', header=None)
    df1 = pd.read_csv('path/to/file2.csv', sep=',', header=None)
    df2 = pd.read_csv('path/to/file3.csv', sep=',', header=None)
    

    你可以像下面这样连接

    df.reset_index(inplace=True, drop=True)
    df1.reset_index(inplace=True, drop=True)
    df2.reset_index(inplace=True, drop=True)
    pd.concat([df,df1,df2], axis=0)
    

    按预期输出

    【讨论】:

    • 嗨纳伦德拉,添加axis = 1仍然没有帮助,因为我看到在我的输出文件中添加了额外的“,”,这会为每个文件的行生成空行值和额外的列.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多