如何在 python pandas 循环中对数据帧执行操作
Posted
技术标签:
【中文标题】如何在 python pandas 循环中对数据帧执行操作【英文标题】:How to perform action on dataframes in loop in python pandas 【发布时间】:2018-04-11 19:58:09 【问题描述】:我有 25 个 2 列数据框,我想将第 0 列除以第 1 列,以生成第 3 列 - 即将第 3 列添加到 25 个数据框的每一个上。
我相信我的问题是在循环中正确“识别”数据帧。到目前为止,我已经尝试过:
for country in countries.index:
data = [country].iloc[:, 0] / [country].iloc[:,1]
[country].Ratio = [country].data
其中 countries.index 是数据框的国家/地区列表(索引)。但这给出了错误:
AttributeError: 'list' 对象没有属性 'iloc'
我已经尝试了上述的几种变体,以及在密钥之前包含 vars(),但我似乎无法解决。
每个数据框的名称与 countries.index 中每个国家/地区的名称匹配
【问题讨论】:
【参考方案1】:您不需要循环遍历值。如果需要循环遍历数据框可以创建一个数据框列表,然后可以直接使用pandas的apply方法,也可以直接划分数据框的列。
countries = [country1, country2, country3] # list of dataframes
for country in countries:
country['ratio'] = country['data1']/country['data2']
现在您列表中的每个数据框都会有一个新的ratio
列。
【讨论】:
但是如果我想对 25 个数据帧中的每一个都执行此操作,我宁愿循环遍历每个数据帧,而不是一个一个地执行 您可以创建一个数据框列表并在列表中循环。但正确的方法是你应用矢量方式。【参考方案2】:您遇到的错误表明您根本没有在数据帧上进行操作。另外,您的语法不正确。
def add_ratio(df):
df['ratio'] = df.iloc[:,0] / df.iloc[:,1]
return df
另外,根据您的问题,听起来您的意思是您的数据框长度为 25 个条目,而不是 25 个单独的数据框。
如果您有一个名为“国家”的数据框列表:
for country in countries:
country['ratio'] = country.iloc[:,0] / country.iloc[:,1]
或
for country in countries:
country = add_ratio(country)
如果您正在谈论一个名为国家的数据框,其中包含 25 个国家/地区:
countries['ratio'] = countries.iloc[:,0] / countries.iloc[:,1]
【讨论】:
嗨,mauve,你的场景“如果你有一个名为“国家”的数据框列表”就是我所处的情况。这看起来不错,但它给出了错误“AttributeError:'str' object has没有属性 'iloc'" - 这似乎与第 2 行相反 这意味着你没有数据框列表,你有一个字符串列表。 请分享更多您遇到问题的代码。如何让 DataFrame 开始? 我有 25 个单独的数据框,我试图按名称引用它们(上面的国家/地区) 如果您将它们列在列表中,听起来您的名称周围有引号。删除引号。我不知道,因为我不知道你是如何创建它们的,也不知道它们是从哪里得到的,等等。我不知道你的代码为什么认为它是一个字符串。以上是关于如何在 python pandas 循环中对数据帧执行操作的主要内容,如果未能解决你的问题,请参考以下文章
如何在 FOR 循环中对 Python Pandas 列表中的元素执行字符串更改
Python 3.x - 使用 for 循环将数据附加到 Pandas 数据帧
基于条件更改行值的 Python for 循环可以正常工作,但不会更改 pandas 数据帧上的值?
如何从 for 循环返回多个具有唯一名称的 pandas 数据帧?