Python附加多个csv文件并添加带有文件名的列?

时间:2019-01-13 20:28:40

标签: python pandas csv append

我在一个文件夹中有20多个CSV文件。所有文件的结构相同,只是代表不同的日子。

示例:

Day01.csv

Day02.csv

Day03.csv

Day04.csv(依此类推...)

文件仅包含两个数字列:x和y。我想将所有这些csv文件一起添加到一个大文件中,并为文件名添加一列(天)。我探索了类似的示例来生成以下代码,但是此代码将每个y添加到单独的列(Y1,Y2,Y3,Y4等)。我只想将此附加文件分为三列:x,y,文件名。如何修改代码以进行正确的追加?

我已经尝试过以下示例中的代码:Read multiple csv files and Add filename as new column in pandas

import pandas as pd
import os
os.chdir('C:....path to my folder')
files = os.listdir()
df = pd.concat([pd.read_csv(fp).assign(New=os.path.basename(fp)) for fp in files])

但是,此代码未将所有Y值附加在一个列下。 (但是,所有其他方面似乎都起作用)。有人可以提供帮助,以使所有Y值都在同一列下吗?

2 个答案:

答案 0 :(得分:0)

python非常擅长完成这些简单的任务,几乎无法置信……

fake_files = lambda n: '\n'.join(('%d\t%d'%(i, i+1) for i in range(n, n+3)))

file_name = 'fake_me%s.csv'

with open('my_new.csv', 'wt') as new:
    for number in range(3): # os.listdir()
#        with open(number) as to_add:
#            rows = to_add.readlines()
            rows_fake = fake_files(number*2).split('\n')
            adjusted_rows = [file_name%number + '\t' + row for row in rows_fake]
            new.write('\n'.join(adjusted_rows) + '\n')

通过调整您的特定io和命名,这就是您所需要的。 您只需复制代码并运行它,然后研究其工作原理即可。

答案 1 :(得分:0)

在将filename附加到列表之前,应通过创建dataframe列来进行以下操作。

file_list = list()

for file in os.listdir():
    if file.endswith('.csv'):
        df = pd.read_csv(file)
        df['filename'] = file
        file_list.append(df)

all_days = pd.concat(file_list, axis=0, ignore_index=True)