当我的表中也有NaN值时,我可以用什么代替.loc?

时间:2019-02-11 19:51:55

标签: python pandas

我想按每个运动员的名字分组,从每个人那里获得最小年龄,然后按照年龄从最小到最大的顺序对其进行排序,但是在我的数据中,还存在一些Nan值,我得到了FutureWarning: 将类似列表的标签传递给.loc或[]且缺少标签会引发 将来会出现KeyError,您可以使用.reindex()作为替代。 是否可以跳过带有Nan值的记录?

这是我的代码,tab是我从老师那里得到的csv文件中读取的表:

tabYoungest=tab.sort_values(by='Age')  
tabYoungestgesamt=tabYoungest.loc[tabYoungest.groupby('Name')['Age'].idxmin()]
tabYoungestgesamt.head(20)

1 个答案:

答案 0 :(得分:2)

IIUC可以通过使用.sort_values + groupby + head轻松实现。输出将是每个名称的最小年龄,从最小到最大排序,所有名称的末尾都缺少年龄。

样本数据:

import pandas as pd
import numpy as np

np.random.seed(1)
tab = pd.DataFrame({'Name': list('ABCDEFGHIJ')*100,
                   'Age': np.random.normal(50,5,1000)})
tab.loc[1000] = ['Z', np.NaN]

代码:

tab = tab.sort_values('Age')
tab.groupby('Name').head(1)

     Name        Age
892     C  34.731178
661     B  36.045018
367     H  36.087328
738     I  36.508191
976     G  36.679370
589     J  37.418481
414     E  37.932485
5       F  38.492307
973     D  38.508971
790     A  39.568047
1000    Z        NaN