【问题标题】:Problem: "argument of type 'float' is not iterable" when iterate rows in Pandas问题:在 Pandas 中迭代行时,“'float' 类型的参数不可迭代”
【发布时间】:2019-08-24 18:10:49
【问题描述】:

我正在尝试迭代名为“cd”的 Pandas 数据框中的每一行。 如果一个特定的单元格,例如一行中的 [row,empl_accept] 包含一个子字符串,然后更新另一个单元格的值,例如同一数据帧中的 [row,empl_accept_a]。

for row in range(0,len(cd.index),1):
    if 'Master' in cd.at[row,empl_accept]:
        cd.at[row,empl_accept_a] = '1'
    else:
        cd.at[row,empl_accept_a] = '0'

上面的代码不起作用,jupyter notebook 显示错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-70-21b1f73e320c> in <module>
      1 for row in range(0,len(cd.index),1):
----> 2     if 'Master' in cd.at[row,empl_accept]:
      3         cd.at[row,empl_accept_a] = '1'
      4     else:
      5         cd.at[row,empl_accept_a] = '0'

TypeError: argument of type 'float' is not iterable

我不太确定那里有什么问题,因为 for 循环不包含浮点变量。

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    不要为此使用循环。您可以通过以下方式批量执行此操作:

    cd['empl_accept_a'] = cd['empl_accept'].str.contains('Master').astype(int).astype(str)

    这将在列中存储 '0' 和 '1'。话虽如此,我不相信将其存储为字符串是否是一个好主意。您可以将这些存储为bools:

    cd['empl_accept_a'] = cd['empl_accept'].str.contains('Master')

    例如:

    >>> cd
        empl_accept  empl_accept_a
    0        Master           True
    1         Slave          False
    2         Slave          False
    3  Master Windu           True
    

    【讨论】:

    • 感谢您的回答,我已经尝试过您上面提到的方法(使用 str.contains),并且可以完美运行。我只想问为什么我们应该在这个过程中使用循环?
    • @flamingheart:因为 pandas 被构造为处理 bulk 中的数据。它使用幕后的 C 对象。如果您使用它来检索单个元素,那么 pandas 的整个性能提升就会丢失。
    • 非常感谢,您把所有问题都弄清楚了。我需要在这些单元格上设置值 '0' 和 '1' 的原因是我需要将数据框导出到 excel 并且这些单元格需要按格式显示 '0' 和 '1' (我实际上更喜欢您的解决方案存储 bool 值) .
    【解决方案2】:

    您需要在数据框中检查 [row,empl_accept] 中放置的值。我确信在您的数据框中的这个位置会有一些数值。只需打印该值,如果有问题,您就会发现问题。

     print (cd.at[row,empl_accept])
    

    【讨论】:

    • 谢谢,我应该在处理之前对数据进行清理,但是即使我修复了数据框,问题仍然存在。
    猜你喜欢
    • 2020-05-07
    • 2019-01-30
    • 1970-01-01
    • 2022-11-08
    • 2017-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2023-04-06
    相关资源
    最近更新 更多