【问题标题】:Truth value of series is ambiguous系列的真值不明确
【发布时间】:2020-10-21 06:55:55
【问题描述】:

我不完全确定如何解决问题,但这是我遇到的一个问题:

for row in concat_data.index: 
  if (concat_data['% interest'][row]).str.contains('%'):
    concat_data['% interest'] = concat_data['% interest'].str.split('%', expand=True)

concat_data 是我的数据框,我想遍历 '%interest' 列的每一行,如果在该单元格中找到它,则在 '%' 处拆分。

错误信息是:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

我尝试过使用 .any(),但也没有用。

我添加了一个print(concat_data['% interest'][row]),它说这是一个系列。

任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 您不能将一个值设置为多个值。您可以将橙子放入桶中,但不能将桶放入橙子中...例如,在excel中,您不能将单元格A1设置为整列A或A列的一部分,让我们坐下@987654328 @ 到单元格A1。关于您的 stackoverflow 问题,请格式化您的代码,包括示例输入数据和示例预期输出数据。从本质上讲,您要创建一个最小的可重现示例。请看:stackoverflow.com/questions/20109391/…
  • if 对单个布尔值进行操作,但 pd.Series 表示多个值。您需要一个矢量化布尔掩码操作,例如 np.where

标签: python pandas


【解决方案1】:

我认为您根本不需要使用 if 语句,也不需要通过数据框进行迭代。 split 方法将获取第一次出现 '%' 之前的所有内容,如果它首先不包含 '%',则保持该值不变。

所以基本上就是这样做:

concat_data['% interest'] = concat_data['% interest'].str.split('%', expand=True)

这是假设您的数据看起来像“50.6%”。查看您的数据样本会很有帮助。

【讨论】:

  • 感谢您的回复。那是我的初始代码,但它实际上清空了每个没有 % 的单元格。这就是我添加 if 语句的原因。
【解决方案2】:

这里有一些选项... 如果您想对符合您条件的数据框的每一行做一些事情,您可以:

concat_data = pd.DataFrame(data=['5.3','5.3%','5.3%APR'],columns=['% interest'])
for row in concat_data.index:
    if '%' in concat_data['% interest'][row]:
        concat_data['% interest'][row] = concat_data['% interest'][row].split('%')

这正确使用了“if”语句,因为它一次只对一个值进行操作。

或者您可以使用列表推导更新列:

concat_data['% interest'] = [x.split('%') if '%' in x else x for x in concat_data['% interest']]

【讨论】:

  • 感谢您的回复。我之前实际上使用过 if 语句,但它给了我这个错误:'float' 类型的参数是不可迭代的
【解决方案3】:

data

这就是该列的样子,我的代码应该忽略像“0.005”这样的单元格,并将像“7.75% (1M L+675, 1.00%”这样的单元格拆分成“7.75%”。

再次感谢。

【讨论】:

  • 有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 2020-03-30
  • 1970-01-01
相关资源
最近更新 更多