gpt4 book ai didi

python - 如何在 python 中迭代多个数据帧以选择每个数据帧中的一列?

转载 作者:行者123 更新时间:2023-11-30 22:57:33 25 4
gpt4 key购买 nike

对于我的项目,我正在读取包含美国每个州数据的 csv 文件。我的函数将其中每个转换为单独的数据帧,因为我需要对每个州的信息执行操作。

def RanktoDF(csvFile):
df = pd.read_csv(csvFile)
df = df[pd.notnull(df['Index'])] # drop all null values
df = df[df.Index != 'Index'] #Drop all extra headers
df= df.set_index('State') #Set State as index
return df

我将此函数应用于我的每个文件,并返回带有数组 varNames 中的名称的 df

for name , s in zip (glob.glob('*.csv'), varNames):
vars()["Crime" + s] = RanktoDF(name)

所有这些都很完美。我的问题是我还想创建一个由每个状态数据帧中的一列组成的数据帧。

我尝试迭代我的数据框列表并选择我想要将其附加到新数据框的列(人口):

dfList

dfNewIndex = pd.DataFrame(index=CrimeRank_1980_df.index) # Create new DF with Index


for name in dfList: #dfList is my list of dataframes. See image
newIndex = name['Population']
dfNewIndex.append(newIndex)

#dfNewIndex = pd.concat([dfNewIndex, dfList[name['Population']], axis=1)

我的错误总是相同的,这告诉我名称被视为字符串而不是实际的数据框

TypeError                                 Traceback (most recent call last)
<ipython-input-30-5aa85b0174df> in <module>()
3
4 for name in dfList:
----> 5 newIndex = name['Index']
6 dfNewIndex.append(newIndex)
7 # dfNewIndex = pd.concat([dfNewIndex, dfList[name['Population']], axis=1)

TypeError: string indices must be integers

我知道我的列表是字符串列表而不是变量/数据帧,所以我的问题是如何纠正我的代码以便能够执行我想要的操作,或者是否有更简单的方法来执行此操作?

我查找过的任何解决方案都给出了答案,其中数据帧是显式键入的以便连接,但我有 50 个,所以它有点不可行。任何帮助将不胜感激。

最佳答案

一种方法是索引到 vars(),例如

for name in dfList:
newIndex = vars()[name]["Population"]

或者,我认为将数据帧存储在容器中并迭代它会更整洁,例如

frames = {}

for name, s in zip(glob.glob('*.csv'), varNames):
frames["Crime" + s] = RanktoDF(name)

for name in frames:
newIndex = frames[name]["Population"]

关于python - 如何在 python 中迭代多个数据帧以选择每个数据帧中的一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36601956/

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