熊猫数据框中的值为13,但并非始终可以识别

时间:2018-07-03 15:12:49

标签: python python-3.x pandas dataframe

我正在为“数据科学概论”课程的作业。我有一个数据框,其中“国家”为索引,“排名”为列之一,当我尝试缩小数据框以仅包括排名在1-15的国家的行时,以下工作适用,但伊朗不包括在内排名13。

df.set_index('Country', inplace=True)
df.loc['Iran', 'Rank'] = 13 #I did this in case there was some sort of 
corruption in the original data
df_top15 = df.where(df.Rank < 16).dropna().copy()   
return df_top15

当我尝试

df_top15 = df.where(df.Rank == 12).dropna().copy()

我去了西班牙。

但是当我尝试

df_top15 = df.where(df.Rank == 13).dropna().copy()

我只得到列标题,伊朗没有行。

我也尝试过

df.Rank == 13

在除伊朗以外的所有国家/地区都得到了False的序列。

有什么想法会导致这种情况吗?

1 个答案:

答案 0 :(得分:0)

您的代码可以正常工作:

df = pd.DataFrame([['Italy', 5],
                   ['Iran', 13],
                   ['Tinbuktu', 20]],
                  columns=['Country', 'Rank'])

res = df.where(df.Rank < 16).dropna()

print(res)

  Country  Rank
0   Italy   5.0
1    Iran  13.0

但是,我不喜欢这种方法,因为由于某些值最初转换为mask,因此Rank系列的dtype变成float

我认为,更好的主意是使用NaNquery。使用这两种方法都无需使用loc

dropna