如何附加多个 CSV 文件并在 Python 中添加指示文件名的附加列?
Posted
技术标签:
【中文标题】如何附加多个 CSV 文件并在 Python 中添加指示文件名的附加列?【英文标题】:How to append multiple CSV files and add an additional column indicating file name in Python? 【发布时间】:2019-06-07 22:26:01 【问题描述】:我在一个文件夹中有 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 值都在一个列下吗?
【问题讨论】:
使用 Unix 命令行工具有一个更快的解决方案 逐步构建您的解决方案,因此 a) 编写一个程序,该程序读取一个文件并使用您添加的列写入一个新文件(例如读取一行,按字符串添加新列并写入)b)取出读取的部分并将其包装到返回要写入的行的函数中。 c) 打开要写入的文件 d) 对要读取的文件进行循环,然后将新行写入最终文件。使用 vanilla python 可以轻松完成所有这些操作,无需任何额外的库 有支持此功能的开源工具,根据您的情况/目标,它们可能是一种选择。一个是csvstack from csvkit。另一个是tsv-append from eBay's tsv utilities。 (免责声明:我是作者。)可能还有其他工具支持此功能。 @RomanPerekhrest 没错,cat Day*.csv > AllDays.csv
。 If the only tool you have is pandas
, everything will look like a DataFrame
.
【参考方案1】:
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 和命名,这就是您所需要的。 您可以复制代码并运行它并研究它是如何工作的。
【讨论】:
【参考方案2】:在将dataframe
附加到您的列表之前,应通过创建filename
列来实现以下操作。
import os
import pandas as pd
file_list = []
for file in os.listdir():
if file.endswith('.csv'):
df = pd.read_csv(file,sep=";")
df['filename'] = file
file_list.append(df)
all_days = pd.concat(file_list, ignore_index=True)
all_days.to_csv("all.txt")
【讨论】:
谢谢!这有帮助!我能够让它工作!干杯! :-)以上是关于如何附加多个 CSV 文件并在 Python 中添加指示文件名的附加列?的主要内容,如果未能解决你的问题,请参考以下文章
无论如何要在这个python程序中添加一堆csv文件的输入?我想搜索超过 15 个 csv 文件