如何使用pandas模块合并(即“concat”)100+.csv文件?

2024-10-01 00:28:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python的数据科学新手。因此,我想使用以下数据“https://www.ssa.gov/OACT/babynames/limits.html”,这里的主要问题是,不是给我一个包含所有年份的数据的文件,而是为每个年份提供一个单独的文件。此外,每个单独的文件也缺少列标题

仅供参考,这些数据包括1910年以来所有注册美国公民的姓名、性别和一些身份证号码。这些数据向公众开放(旨在帮助人口统计学家追踪流行名字的趋势)

因此,我面临的一个主要问题是需要直接编辑100多个文件(手动、打开每个文件并进行编辑),以确保所有列标题相同(这是像concat这样的函数工作所必需的)

另一个大问题是任务的规模太大。对100*个文件使用concat是非常非常低效的,而且仅仅扫描/读取数据就要消耗100多行代码

当然,'concat'是为此而构建的,但是我认为对于大约130个文件使用它是非常低效的。关于缺少的列标题,我已经手动编辑了一些文件,但是有太多的文件无法直接编辑

names2010 = pd.read_csv("../yob2010.txt")
names2011 = pd.read_csv("../yob2011.txt")
names = pd.concat([names2010, names2011])

直觉上,这是我想要避免的>

#rough notation 
names = pd.concat([names1910, names1911 ..., names2017, names2018])

这只是两年的数据。我需要创建一个包含1910年到2018年所有数据的单一数据框架

更新:我已经知道如何组合所有不同的.txt文件,但仍然需要解析列标题

dataframes = pd.read_csv("../yob1910.txt")
for year in range(1911, 2019):
       temp_frame = pd.read_csv("../yob{}.txt".format(year))
       dataframes = pd.concat([temp_frame, dataframes])

Tags: 文件csv数据txt编辑标题readnames
2条回答

尝试以下操作:

import pandas as pd
import glob

path = r'../' # use your path
all_files = glob.glob(path + "/*.txt")

list = []

for filename in all_files:
    df = pd.read_csv(filename)
    list.append(df)

final_df = pd.concat(list, axis=0, ignore_index=True)

欢迎来到Stackoverflow和数据科学!似乎您在学习过程中还太早,还没有尝试过Python的原生结构——容器数据类型。它们可以通过循环来帮助简化代码

使任务更简单的一种简单方法是将每个数据集作为一个项目保存在列表中。例如(此代码未经测试):

dataframes = []
for year in range(1910, 2018):
    dataframes.append(pd.read_csv(f"../yob{year}.txt"))
names = pd.concat(dataframes)

请注意,这些文件名是使用python3.6的f-string特性从一年开始构建的,但是如果您使用的是python3.6和更早版本,您可以用其他方法来替代它,以获得相同的结果。两种选择:

"../yob{}.txt".format(year)

以及

"../yob%d.txt" % year

相关问题 更多 >