我已经完成了
myrng=range(1971,2009)
d = {}
for name in myrng:
wd1=pd.read_csv('D:\\temp\\'+str(name)+'.csv')
d[str(name)] = wd1
del wd1
d.keys()
给予
dict_keys(['1971',.... '2009'])
每个1971 ... 2009年的列都有:“州”,“区”和“日期” 我想在“ d”的所有数据框中创建一个名称为“ cat”的列,该列将具有state和“ districts”的“ coloumns”的串联值 我有另一个数据框说df,也有一个列“猫”。 我想将此合并到d中的所有数据框。关键是我想避免循环。 我可以用for循环来做,因为我想做多次。 for代码可以如下所示
for name in myrng:
A=d[str(name)]
A['cat']=A.state + A.district
A= pd.merge(df,A ....### option###)
进行剩余计算
答案 0 :(得分:1)
dict
个数据帧,您就无法避免循环如果要使数据结构化为数据帧的字典,则无法避免for
循环。这是因为字典中的每个数据框值都是一个单独的pd.DataFrame
实例。您无法临时链接它们以进行一项或多项操作。
您可以将列表理解与pipe
结合使用来简化逻辑/循环:
def transformer(df):
df['cat'] = df['state'] + df['district']
df = pd.merge(df, ...)
return df
d = {name: pd.read_csv(fr'D:\temp\{name}.csv').pipe(transformer) for name in myrng}
dict
中组合数据框如果要避免循环,可以使用pd.concat
组合字典中的数据框并应用转换:
df_combined = pd.concat(d.values()).pipe(transformer)
答案 1 :(得分:0)
您可以将生成器传递到pd.concat
中,以将所有文件数据连接在一起。然后,根据结果可以计算'cat'
列。
myrng=range(1971,2009)
data = pd.concat(
pd.read_csv('D:\\temp\\'+str(name)+'.csv', usecols=['dates', 'state', 'district'])
for name in myrng
)
data['cat'] = data['state'] + data['district']