【问题标题】:ValueError: cannot index with vector containing NA / NaN valuesValueError:无法使用包含 NA / NaN 值的向量进行索引
【发布时间】: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 新手,一直找不到一个可以详细解释错误的好网站。你会碰巧知道一个吗?
  • 我上面的评论是你应该阅读的堆栈溢出答案的链接
  • @MoxieBall 是的,但这个问题和我的问题不一样,我有 csv 文件中存在的所有值,但它仍然给我这个错误
  • 是的,如果 contains 用于任何包含 NaN 的向量并且不使用上面链接的解决方案,则会出现该错误。

标签: python excel string csv


【解决方案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 但仍然遇到此问题。
  • 我更喜欢这个解决方案,因为它清楚地表明问题的根源是试图对非字符串值执行字符串操作,这不容易从错误消息中推断出来。
猜你喜欢
  • 2018-07-29
  • 1970-01-01
  • 2022-12-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 2021-04-19
  • 2016-12-23
  • 2022-11-21
相关资源
最近更新 更多