主要问题是您可能
'np.nan'存储了字符串,而不是真正的null值。以下是这三个
null值的不同处理方式:
样本数据:
import pandas as pddf = pd.Dataframe({'A': [1,1,2,2,3,3], 'B': [None, '1', np.NaN, '2', 3, 4]})first
这将返回每个组中的第一个非空值。奇怪的是它不会跳过
None,尽管可以通过kwarg来实现
dropna=True。因此,
您可能会返回原来属于不同行的列的值 :
df.groupby('A', as_index=False).first()# A B#0 1 None#1 2 2#2 3 3df.groupby('A', as_index=False).first(dropna=True)# A B#0 1 1#1 2 2#2 3 3head(n)
返回组中的前n行。 值保持在行内 。如果您给它的
n行数超过了行数,它将返回该组中的所有行而不会抱怨:
df.groupby('A', as_index=False).head(1)# A B#0 1 None#2 2 NaN#4 3 3df.groupby('A', as_index=False).head(200)# A B#0 1 None#1 1 1#2 2 NaN#3 2 2#4 3 3#5 3 4nth
:
这占用了
nth行,因此 值 再次 保持在row内
。
.nth(0)与相同
.head(1),但用途不同。例如,如果您需要第0行和第2行,则很难做到
.head(),而使用则容易
.nth([0,2])。同样,它
.head(10)比容易编写
.nth(list(range(10))))。
df.groupby('A', as_index=False).nth(0)# A B#0 1 None#2 2 NaN#4 3 3nth还支持删除具有任何空值的行,因此您可以使用它返回不包含任何空值的第一行,这与
.head()
df.groupby('A', as_index=False).nth(0, dropna='any')# A B#A #1 1 1#2 2 2#3 3 3


