ValueError:无法使用包含 NA / NaN 值的向量进行索引

Posted

技术标签:

【中文标题】ValueError:无法使用包含 NA / NaN 值的向量进行索引【英文标题】:ValueError: cannot index with vector containing NA / NaN values 【发布时间】:2018-12-06 16:29:08 【问题描述】:

我不明白为什么我会收到标题中列出的错误,我打算返回的值是数字 30

import csv
import os
import pandas as pd
os.chdir('C:\\Users\\khalha\\Desktop\\RealExcel')
filename = 'sales.csv'

Sales = pd.read_csv('sales.csv')
iFlowStatus = Sales[Sales['Product'].str.contains('iFlow')]['Status']
print(iFlowStatus)

【问题讨论】:

@MoxieBall 我是 python 新手,一直找不到一个可以详细解释错误的好网站。你会碰巧知道一个吗? 我上面的评论是你应该阅读的堆栈溢出答案的链接 Ignoring NaNs with str.contains的可能重复 @MoxieBall 是的,但这个问题和我的问题不一样,我有 csv 文件中存在的所有值,但它仍然给我这个错误 是的,如果 contains 用于任何包含 NaN 的向量并且不使用上面链接的解决方案,则会出现该错误。 【参考方案1】:

错误消息表示数据帧包含默认为 na/NaN 的空白条目。

您可以在语法中添加na=False 来填充缺失值的值。

import csv
import os
import pandas as pd
os.chdir('C:\\Users\\khalha\\Desktop\\RealExcel')
filename = 'sales.csv'

Sales = pd.read_csv('sales.csv')
iFlowStatus = Sales[Sales['Product'].str.contains('iFlow', na=False)]['Status']
print(iFlowStatus)

【讨论】:

没问题,是的,我大约一个月前就知道了,但这对任何看到这篇文章的人都有好处,所以谢谢!【参考方案2】:

另一个可能的问题:您可以使用不包含 NaN 的混合类型列来解决此问题。例如:

> df = pd.DataFrame('x': ['hi', 99])
> df.x.isna().any()
False
> df[df.x.str.contains('hi')]
...
ValueError: cannot index with vector containing NA / NaN values

根据您想要执行的操作,您可以强制转换 (df.x.astype(str).str.contains('hi')) 或删除有问题的行。

【讨论】:

谢谢@Kristina,我遇到了同样的问题。我已删除所有 nan 但仍然遇到此问题。 我更喜欢这个解决方案,因为它清楚地表明问题的根源是试图对非字符串值执行字符串操作,这不容易从错误消息中推断出来。

以上是关于ValueError:无法使用包含 NA / NaN 值的向量进行索引的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用isna函数查看列表和dataframe中是否包含缺失值将dataframe中数据列中的异常值标注为缺失值NA使用na.omit函数删除dataframe中包含缺失值NA的数据行

在季节周期分析中处理NA

未能省略包含 NA 值的列:na.rm=TRUE 和 na.action=NULL

使用 str.contains 忽略 NaN

R中的Prewhiten给出“所有时间都包含NA”,但时间序列中没有NA值

RODBC 读取错误,其中 excel 列包含前导 NA