【问题标题】:How to perform action on dataframes in loop in python pandas如何在 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 中每个国家/地区的名称匹配

【问题讨论】:

    标签: python pandas loops dataframe


    【解决方案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 个单独的数据框,我试图按名称引用它们(上面的国家/地区)
    • 如果您将它们列在列表中,听起来您的名称周围有引号。删除引号。我不知道,因为我不知道你是如何创建它们的,也不知道它们是从哪里得到的,等等。我不知道你的代码为什么认为它是一个字符串。
    猜你喜欢
    • 2018-11-23
    • 2017-10-27
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多