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

时间:2018-02-19 08:41:34

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

我试图从数据框中获取词汇表中包含任何子串的产品的平均价格。我已经能够在多个电子表格中使用以下代码执行此操作 -

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)没有处理此问题。

迫切需要一些帮助!谢谢!

2 个答案:

答案 0 :(得分:4)

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

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

或尝试省略inplace=True并分配回来:

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

答案 1 :(得分:0)

解决索引问题的一种方法是实际使用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'

这个技巧!