在循环文件时添加列名

Posted

技术标签:

【中文标题】在循环文件时添加列名【英文标题】:Adding column names while looping through files 【发布时间】:2016-10-26 17:49:02 【问题描述】:

我对 Python 很陌生,所以请多多包涵。我有一个包含 csv 文件的文件夹,其中第一行是我需要处理的数据。所以我需要给他们列名,以便我以后可以调用它们。每个 csv 具有相同数量的列。在我的练习中,我使用了三列。

我了解如何将文件名添加到单个文件:

my_file = pd.read_csv('path\the_file.csv', names = ['first','second','third'])

但我需要转到我的目录并循环浏览大量 csv 文件。老实说,我什至不知道该怎么做(我知道很难过)。我已经设法使用 os.listdir 遍历文件名,但是当我需要其中的数据时,这对我没有多大用处。一旦我得到这些列名,我就知道该怎么做了。

尽可能使用 pandas 是非常可取的。我看了很多,但似乎找不到任何真正有效的东西。我真的很感激帮助!

编辑: 这是我将要做的一部分,但需要为文件夹中的所有 csv 文件做。

my_file = pd.read_csv('path\the_file.csv', names=['first','second','third'])
first_col = my_file['first']
second_col = my_file['second']
third_col = my_file['third']
key_codes = []
key_codes.append(second.map(str) + third.map(str))

所以,如果第 2 列有“123”,第 3 列有“4”,那么我正在制作“1234”,但现在我只需要弄清楚如何循环文件并为它们添加相同的名称/标题。

【问题讨论】:

我想我不明白这个问题。请清楚说明什么不起作用。 嗨@wiredflamingo,你能告诉我们你的步骤吗?请记住,SO 不是代码工厂,也不是外包代码编写...欢迎使用 SO 或类似... 当你循环所有文件时,想要的输出是什么?列表 od DataFrames ?或者您需要将所有数据帧合并为一个? 抱歉,我有一个文件夹,里面有一堆 CSV 文件。我需要创建一个 for 循环,为每个 CSV 添加列名/标题。我不需要重写原始文件,只需要制作它,以便我可以调用代码中的列。例如,如果第 1 列显示“123”,第 2 列显示“4”,我会将其设为“1234”,但我知道该怎么做,我只需要能够调用这些列。希望这会有所帮助。 抱歉,您只需要添加列名并将每个列名写入新的 csv 吗?然后每个文件都有不同的标题或每个文件都有相同的标题?为什么需要熊猫? 【参考方案1】:

你需要IIUCglob:

#glob can use path with *.txt - see http://***.com/a/3215392/2901002
import glob
key_codes = []
for files in glob.glob('files/*.csv'):
    df = pd.read_csv(files, names = ['first','second','third'])
    key_codes.append(df.second.map(str) + df.third.map(str))

通过iloc选择secondthird列的另一种解决方案,还删除了参数names并将header=None添加到read_csv

#glob can use path with *.txt - see http://***.com/a/3215392/2901002
import glob
key_codes = []
for files in glob.glob('files/*.csv'):
    df = pd.read_csv(files, header=None)
    key_codes.append(df.iloc[0,1].astype(str) + df.iloc[0,2].astype(str))

【讨论】:

哦,谢谢!我之前没有看到那个链接。我曾尝试过与您实际发布的内容非常相似的东西,但最终我忘记了所有尝试。

以上是关于在循环文件时添加列名的主要内容,如果未能解决你的问题,请参考以下文章

在将带有空字符串的新列添加到熊猫数据框时替换现有列名

从 csv 文件读取时,熊猫会添加列

如何在使用 Sequelize 更改列或添加新列时更新迁移文件

在数据框中动态添加列,列名作为 List 中的元素

数据库表的列名循环添加

c#中datatable怎么添加列名