系列的真值不明确

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

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]),它说这是一个系列。

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


梵蒂冈之花
浏览 128回答 3
3回答

qq_遁去的一_1

我认为您根本不需要使用 if 语句,也不需要使用数据帧的迭代。split 方法将获取第一次出现 '%' 之前的所有内容,并且如果它首先不包含 '%',则保持该值不变。所以基本上只需这样做:concat_data['% interest'] = concat_data['% interest'].str.split('%', expand=True)假设您的数据看起来像“50.6%”。查看您的数据样本会很有帮助。

GCT1015

数据这就是该列的样子,我的代码应该忽略“0.005”之类的单元格,并将“7.75% (1M L+675, 1.00%”) 之类的单元格拆分为“7.75%”。再次感谢。

潇湘沐

这里有一些选项...如果您想对数据帧的每一行执行与您的条件匹配的操作,您可以: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']]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python