gpt4 book ai didi

python - 将操作应用于字典中的所有数据帧,无需循环

转载 作者:行者123 更新时间:2023-12-01 08:51:34 25 4
gpt4 key购买 nike

我已经完成了以下操作

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,该列将具有 statedistricts 列的串联值。

我有另一个数据框 df,它也有一列 cat

我想将其合并到 d 中的所有数据帧。重点是我想避免循环。我可以使用 for 循环来完成此操作,因为我想多次执行此操作。

for代码可以像下面这样

for name in myrng:
A=d[str(name)]
A['cat']=A.state + A.district
A= pd.merge(df,A ....### option###)

进行剩余的计算

最佳答案

使用数据帧的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)

关于python - 将操作应用于字典中的所有数据帧,无需循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53081440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com