Pandas 将浮点数附加到 for 循环中的列

Posted

技术标签:

【中文标题】Pandas 将浮点数附加到 for 循环中的列【英文标题】:Pandas append float to column in for loop 【发布时间】:2017-03-06 17:26:20 【问题描述】:

我有 pandas DataFrame,我想在其中使用 df 中的元素进行一些计算,然后将计算出的数字附加到同一 df 中的单独列中。

这是我现在的代码。

def percentfunction(df):
    for i in range(100): 
        if df['month_number'][i] == 10:
            df = df['percent_october'][i].add([df['cellsum'][i]/octobersum])
        elif df['month_number'][i] == 11:
            df = df['percent_november'][i].add([df['cellsum'][i]/novembersum])
        elif df['month_number'][i] == 12:
            df = df['percent_december'][i].add([df['cellsum'][i]/decembersum])

AttributeError: 'numpy.float64' object has no attribute 'add'

我尝试了此代码的各种实现,但总是收到错误消息。它要么到达最后一个元素,然后写入仅包含计算的最后一个数字的列,要么在不应该添加任何内容的行中添加。

欢迎批评!

编辑:试图编辑代码。

    def percentfunction(df):
        for i in range(100): 
            if df['month_number'][i] == 10:
                df['percent_october'][i] = df['cellsum'][i]/octobersum
            elif df['month_number'][i] == 11:
                df['percent_november'][i] = df['cellsum'][i]/novembersum
            elif df['month_number'][i] == 12:
                df['percent_december'][i] = df['cellsum'][i]/decembersum

我至少可以运行它,但这会在不应该的行中填充值...

EDIT2:这是我的数据框示例

>>> df.head()
      Index          month_number        month_text  \
0     Name1                    10           October     
1     Name1                    11           November    
2     Name1                    12           December    
3     Name2                    10           October     
4     Name2                    11           November    

  2000 Unnamed: 4 2001 Unnamed: 6     2002 Unnamed: 8 2003    ...     \
0  NaN        NaN  NaN        NaN      NaN        NaN  NaN    ...      
1  NaN        NaN  NaN        NaN      NaN        NaN  NaN    ...      
2  NaN        NaN  NaN        NaN      NaN        NaN  NaN    ...      
3  NaN        NaN  NaN        NaN  2898.68       3120  NaN    ...      
4  NaN        NaN  NaN        NaN      NaN        NaN  NaN    ...      

  Unnamed: 28 2013 Unnamed: 30  2014 Unnamed: 32 2015 Unnamed: 34 2016  \
0         NaN  NaN         NaN   NaN         NaN  NaN         NaN  NaN   
1         NaN  NaN         NaN   NaN         NaN  NaN         NaN  NaN   
2         NaN  NaN         NaN   NaN         NaN  NaN         NaN  NaN   
3         NaN  NaN         NaN   NaN         NaN  NaN         NaN  NaN   
4         NaN  NaN         NaN  1.26         127  NaN         NaN  NaN   

  Unnamed: 36   cellsum  
0         NaN      3899  
1         NaN      7922  
2         NaN      2181  
3         NaN      3121  
4         NaN       127

这是我的 DataFrame,“cellsum”是该行中所有“未命名”单元格的总和。我通过对 DataFrame 中的所有数据求和,例如 october cellsums (octobersum) 计算了总月数。然后我想添加一个新列,该列的百分比是多少。我希望你能够明白。

【问题讨论】:

【参考方案1】:

您应该避免使用 pandas 循环。您需要这样的东西,然后您可以将其操作为您想要的任何格式:

df["percent_month"] = df.groupby("month_number").apply(lambda x: x/x.sum())

【讨论】:

您好,感谢您的建议。我已经编辑了我的数据框示例,你能看一下吗?【参考方案2】:

一个简单的解决方法是使用df.ix[]

df.ix[i,'percent_october'] = df.ix[i,'cellsum']/octobersum

如果您向我们展示 df 的外观,我们可能会为您提供比循环遍历不推荐的数据帧更智能的解决方案

【讨论】:

嗨,我现在用我的 DataFrame 示例编辑了我的帖子。我尝试了您的建议,但不幸的是,它没有奏效。谢谢@史蒂文

以上是关于Pandas 将浮点数附加到 for 循环中的列的主要内容,如果未能解决你的问题,请参考以下文章

将浮点数的数据框转换为熊猫中的整数?

Python如何将浮点数作为十六进制转换为十进制

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

遍历 pandas 数据框中的列和行并将字符串转换为浮点数

将一列浮点数转换为累积百分比

Hive/Bigsql Pandas 将浮点数转换为整数,使用 pyarrow 将空值转换为镶木地板文件