我正在为“数据科学概论”课程的作业。我有一个数据框,其中“国家”为索引,“排名”为列之一,当我尝试缩小数据框以仅包括排名在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的序列。
有什么想法会导致这种情况吗?
答案 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
。
我认为,更好的主意是使用NaN
或query
。使用这两种方法都无需使用loc
:
dropna