【问题标题】:Python - ValueError: Cannot index with vector containing NA / NaN valuesPython - ValueError:无法使用包含 NA / NaN 值的向量进行索引
【发布时间】:2018-07-29 10:56:46
【问题描述】:

我正在尝试从数据框的单词列表中获取包含任何子字符串的产品的平均价格。我已经能够在多个电子表格上使用以下代码来做到这一点 -

dframe['Product'].fillna('', inplace=True)
dframe['Price'].fillna(0, inplace=True)
total_count = 0
total_price = 0
for word in ransomware_wordlist:
    mask = dframe.Product.str.contains(word, case=False)
    total_count += mask.sum()
    total_price += dframe.loc[mask, 'Price'].sum()
average_price = total_price / total_count
print(average_price)

但是,其中一个电子表格在行 -

处引发错误
dframe['Product'].fillna('', inplace=True)

ValueError: cannot index with vector containing NA / NaN values

我不明白为什么dframe['Product'].fillna('', inplace=True) 没有处理这个问题。

急需帮助!谢谢!

【问题讨论】:

  • 如果省略它并使用mask = dframe.Product.str.contains(word, case=False, na=False)它工作吗?
  • 有问题的文件中的数据是否可信?
  • 另一个想法 - dframe['Product'] = dframe['Product'].fillna('') 应该可以工作。
  • @jezrael 刚刚看到您对上一个问题的回复!太棒了!多谢! :)
  • 是的,顺便说一句,数据文件是机密的,而且太大而无法浏览。

标签: python python-3.x pandas dataframe valueerror


【解决方案1】:

如果第一行失败仍然可以通过参数na=False 替换str.contains 中的NaNs 条件:

mask = dframe.Product.str.contains(word, case=False, na=False)

或者尝试省略 inplace=True 并重新分配:

dframe['Product'] = dframe['Product'].fillna('')

【讨论】:

  • 有效!谢谢! :)
【解决方案2】:

解决索引问题的一种方法是实际使用index

# define x
x = "Price"

# make sure to fill Na/NaN values
dframe[x] = dframe[x].fillna('00')

# identify rows that contain a specific value, returns a list of True/False
id_rows = dframe[x].str.contains(r"^ransom")

# save row index for identified rows, basically save all True
row_index = dframe.loc[id_rows].index

# update the chosen variable `x` with new value on identified rows using row index
dframe.loc[row_index, x] = 'cleaned'

这个伎俩!

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-02
    • 2021-04-19
    相关资源
    最近更新 更多