如何在 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 数据帧?

如何将 for 循环中的 .pkl 文件附加到 for 循环中创建的 pandas 数据帧?

附加在 for 循环中生成的 pandas 数据帧