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")
我期望“值空输出”,但我收到一条错误消息:
“ValueError:一个系列的真值不明确。使用a.empty、a.bool()、a.item()、a.any()或a.all()。”
我尝试删除 IF 语句中的“== True”部分,但仍然出现相同的错误。我进行了谷歌搜索,但找不到与此问题相关的任何内容。我不明白我哪里出错了。
预先感谢您的帮助。
12:13如果通过索引选择获取一个元素,则会出现问题Series,因此对于标量使用Series.item:
if x["retail_price"].iloc[12:13].isna().item():
    print("value empty")
另一个解决方案是将值转换为 numpy 数组并选择第一个值:
if x["retail_price"].iloc[2:3].isna().values[0]:
    print("value empty")
更好的是通过输出中标量的标量值进行选择:
if pd.isna(x["retail_price"].iloc[12]):
    print("value empty")
样本:
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
要在布尔值中进行比较Series(对于一个元素同样有效Series),请检查Using If/Truth statements with pandas。
| 归档时间: | 
 | 
| 查看次数: | 2563 次 | 
| 最近记录: |