我有一组137个文本文件,每个文件都有格式名称,性别,出生次数的数据。每个文件都在其名称后附加年份名称,例如'yob1881.txt'
我想从这137个文件中获取数据并将它们附加到数据框中,并在此过程中添加一个新的列。
这是我到目前为止所做的:
filenames = glob('yob*.txt')
df = pd.DataFrame()
for x in filenames:
startPOS = df.shape[0]
df = df.append(pd.read_csv(x, header=None))
endPOS = df.shape[0]
df.loc[startPOS:endPOS+1, 'year'] = int(x.split('.')[0][-4:])
但是,代码在最后一行抛出错误。有什么想法吗?
答案 0 :(得分:2)
所以,这是我在代码中可以看到的一个快速的东西。从第一个文件中获取数据后,您将其附加到 df ,并在最后添加年份变量。
但是当你第二次做同样的事情时 df 已经包含变量"年"。这是 df 中存在的变量数量不匹配。一个快速修复可能是。
filenames = glob('yob*.txt')
df = pd.DataFrame()
for x in filenames:
df_new = pd.read_csv(x, header=None)
df_new["year"] = int(x.split('.')[0][-4:])
df = df.append(df_new)
答案 1 :(得分:1)
我同意Tanmoy的回复,错误日志会很高兴看到。 也就是说,假设,正如您所说的每个文件的内容具有相同的列,更容易将日期添加到每个文件的DataFrame中,然后连接所有文件:
import pandas as pd
import re
data = []
filenames = glob('yob*.txt')
for x in filenames:
year = int(re.search("(\d+)", x).group())
data.append(pd.read_csv(x, header=None))
data[-1]['year'] = [year, ] * data[-1].shape[0]
df = pd.concat(data)
这样的事情可以解决你的问题。