如何用熊猫解析大量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文件并以某种方式了解表格的每个原始文件来自哪个文件[重复]的主要内容,如果未能解决你的问题,请参考以下文章

mysql中如何用mysqlbinlog工具将日志文件生成txt文件出来分析

如何用熊猫读取 json 文件?

请教如何用JQuery导入导出excel表格

如何用VBA将excel表导出成文本类型的文件?

如何用JS实现一行一行读取一个TXT文件?

如何用javascript和txt文件写一个网页访问量统计代码