如何在python pandas中循环中对数据帧执行操作

时间:2017-10-30 18:31:33

标签: python pandas loops dataframe

我有25个2列数据帧,我希望将第0列除以第1列,以产生第3列 - 即在第25个数据帧的每一个上添加第3列。

我相信我的问题是在循环中正确地“识别”数据帧。到目前为止,我一直在尝试:

for country in countries.index:
    data = [country].iloc[:, 0] / [country].iloc[:,1]
    [country].Ratio = [country].data

其中countries.index是数据框的国家/地区列表(索引)。但是这给出了错误:

  

AttributeError:'list'对象没有属性'iloc'

我已经尝试了上面的几种变体,以及在键之前包含vars(),但我似乎无法解决。

每个数据框的名称与countries.index

中每个国家/地区的名称相匹配

2 个答案:

答案 0 :(得分:0)

你不需要循环使用价值观。如果需要遍历数据框,可以创建数据框列表,然后可以直接使用pandas的apply方法,也可以直接划分数据框的列。

countries = [country1, country2, country3] # list of dataframes 
for country in countries:
   country['ratio'] = country['data1']/country['data2']

现在,列表中的每个数据框都会有一个新的ratio列。

答案 1 :(得分:0)

您获得的错误表明您根本不在数据框上运行。此外,您的语法不正确。

def add_ratio(df):
    df['ratio'] = df.iloc[:,0] / df.iloc[:,1]
    return df

另外,根据您的问题,听起来您的意思是您的数据帧长度为25个条目,而不是25个独立的数据帧。

如果您有一个名为“countries”的数据框列表:

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]