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.rm=TRUE 和 na.action=NULL