如何将 if-else 语句与 python pandas dataframe isna() 函数一起使用?

Shr*_*waj 5 dataframe python-3.x pandas

我是使用 Pandas 数据框的新手,并试图找出一种方法来定位数据框单元格内的 NaN 值。我在 isna() 函数中使用 if 条件。

我的方法是,如果值为 NaN,则打印“value empty”而不是返回布尔值“True”。这是我的方法:

import pandas as pd

x= pd.read_csv("mdata_short.csv", header =[0])
print(x["retail_price"].iloc[12:13])
if x["retail_price"].iloc[12:13].isna() == True:
    print("value empty")
Run Code Online (Sandbox Code Playgroud)

我期望“值空输出”,但我收到一条错误消息:

“ValueError:一个系列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。”

我尝试删除 IF 语句中的“== True”部分,但仍然出现相同的错误。我进行了谷歌搜索,但找不到与此问题相关的任何内容。我不明白我哪里出错了。

预先感谢您的帮助。

jez*_*ael 2

12:13如果通过索引选择获取一个元素,则会出现问题Series,因此对于标量使用Series.item

if x["retail_price"].iloc[12:13].isna().item():
    print("value empty")
Run Code Online (Sandbox Code Playgroud)

另一个解决方案是将值转换为 numpy 数组并选择第一个值:

if x["retail_price"].iloc[2:3].isna().values[0]:
    print("value empty")
Run Code Online (Sandbox Code Playgroud)

更好的是通过输出中标量的标量值进行选择:

if pd.isna(x["retail_price"].iloc[12]):
    print("value empty")
Run Code Online (Sandbox Code Playgroud)

样本

x = pd.DataFrame({
    'retail_price': [1,2,np.nan]
})
print (x)
   retail_price
0           1.0
1           2.0
2           NaN

print (x["retail_price"].iloc[2:3].isna())
2    True
Name: retail_price, dtype: bool

print (x["retail_price"].iloc[2:3].isna().item())
True

print (x["retail_price"].iloc[2:3].isna().values[0])
True

print (pd.isna(x["retail_price"].iloc[2]))
True
Run Code Online (Sandbox Code Playgroud)

要在布尔值中进行比较Series(对于一个元素同样有效Series),请检查Using If/Truth statements with pandas