【问题标题】:Join multiple csv files from a folder into a single csv python将文件夹中的多个 csv 文件加入单个 csv python
【发布时间】:2016-12-23 17:21:07
【问题描述】:

我在一个文件夹中有大约 100 个 csv 文件。

/path/to/directory/*.csv
 it has files abc.csv,dsf.csv,rgfb.csv.....etc

csv 文件的视图。

182 a   1   4   242 52450
182 a   1   2   242 7176
182 c   1   1   242 7176
182 c   1   1   242 7410

我想从目录中取出所有这些 csv,并将其放在一个 csv 中。 没有列名,但所有 csv 都有相同的列数(即 5),我想加入所有 csv,并将其放入 pandas 数据框中并给出列名 作为

col1  col2  col3  col4  col5
data  data  data  data  data
...   ...    ...   ...   ...

我尝试的是。

import os
csv_list = []
for root, dirs,files in os.walk("path/to/directory", topdown=True):
for name in files:
    csv_list.append(os.path.join(root, name))

我得到了 csv 列表

然后我做了

import pandas as pd
combined_csv = pd.append( [ pd.read_csv(f) for f in csv_list ] )

但它是水平而不是垂直附加的。

我还必须为“combined_csv”提供列名 有没有更好的办法?

【问题讨论】:

    标签: python csv pandas


    【解决方案1】:

    如果需要垂直附加,我认为您需要带有参数axis=1concat

    combined_csv = pd.concat([ pd.read_csv(f, header=None) for f in csv_list ], axis=1)
    

    如果需要横向追加,默认参数axis=0可以省略:

    import pandas as pd
    combined_csv = pd.concat([ pd.read_csv(f, header=None) for f in csv_list ], ignore_index=True)
    

    如果需要设置列名使用参数names:

    names = ['col1','col2','col3','col4','col5']
    combined_csv = pd.concat([ pd.read_csv(f, header=None, names = names) for f in csv_list ],
                               ignore_index=True)
    

    【讨论】:

    • 检查编辑,我查看了我的 csv 文件,但您的回答无效。当我尝试 11 个 csv 文件时,我收到了 5 rows × 66 columns
    • 1csv 有 5 列,在将其放入数据框时它正在添加索引,因此 6 列并连接 11 个 csv 文件它给了我 11x6 = 66 列
    • 我觉得我看到了问题,需要参数header=None
    • 仍然,在添加参数并运行 combined_csv = pd.concat([ pd.read_csv(f, header=None) for f in csv_list ], axis=1) 后,我得到 5 行 × 66 列
    • 当然,每秒五个。
    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多