如何用熊猫解析大量txt文件并以某种方式了解表格的每个原始文件来自哪个文件[重复]
Posted
技术标签:
【中文标题】如何用熊猫解析大量txt文件并以某种方式了解表格的每个原始文件来自哪个文件[重复]【英文标题】:How to parse a lot of txt files with pandas and somehow understand from which file each raw of the table [duplicate] 【发布时间】:2019-06-05 05:47:23 【问题描述】:我有一个数据集,其中包含姓名、性别和姓名的人数。有很多文本文件(> 100)。他们每个人都具有相同的信息,但数量参数不同,但对于 1880、1881 .... 2008 年。 这是一个更清楚的链接:https://github.com/wesm/pydata-book/tree/2nd-edition/datasets/babynames 如何导入所有这些文件并用适当的年份标记原始文件? 所以表格看起来像这样:
YEAR NAME GENDER QUANTITY
1998 Marie F 2994
1996 John M 2984
1897 Molly F 54
主要关心的是如何根据文件名用适当的年份标记每个原始文件。
这是我的 1 个文件的代码,但我需要对 100 多个文本文件执行相同的操作...
import pandas as pd
df = pd.read_csv("yob1880.txt", header=None)
df["year"] = 1880 # add new column according to the file`s year
print(df)
【问题讨论】:
嘿,欢迎来到 *** :) 你能在帖子中写下你的起始代码吗? 您所指的文件没有定义年份,而是使用年份创建的文件。 如果你能导入所有文件,你需要df["year"] = 1880
吗?
是的,这就是问题所在,我有文件名为 yob1881.txt,yob1882.txt 但我的数据集中没有这样的列,是否可以根据名称添加这样的列文件?
如果这个数据来自 yob1881.txt 文件,它的 "Year" 列应该有值 1881,如果这个数据来自 yob1994.txt 文件 - 它应该在 "Year" 列中有 1994 的值并且以此类推
【参考方案1】:
这里有两个问题:
-
如何从文件名中提取年份并分配给新列。
如何连接多个数据帧。
您可以使用字符串切片和pd.DataFrame.assign
前者; pd.concat
为后者。假设您的文件名格式为yobXXXX.txt
:
df = pd.concat(pd.read_csv(fn).assign(YEAR=int(fn[3:7])) for fn in filenames)
或者如果你想忽略索引:
df = pd.concat((pd.read_csv(fn).assign(YEAR=int(fn[3:7)) for fn in filenames),
ignore_index=True)
【讨论】:
assign 的技巧效果很好,但在这种情况下串联会出错它给出了一个包含大量列和 NaN 值的巨大矩阵... 更新:在我添加列名称后,它起作用了:new_df.columns = ["Name", "Gender", "Quantity"] 非常感谢!以上是关于如何用熊猫解析大量txt文件并以某种方式了解表格的每个原始文件来自哪个文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章