我在一个文件夹中有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值都在同一列下吗?
答案 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)