如何在熊猫数据框行中循环NaN?

时间:2019-05-18 15:39:26

标签: python pandas dataframe na

我有一个这样的数据框:

df = pd.DataFrame({0: list('wxyz'), 1: [1,2,None,None], 2: [10,20,30,None]}).T
print(df)

    0   1    2    3
0   w   x    y    z
1   1   2  NaN  NaN
2  10  20   30  NaN

如何将所有NA放在左边而不是右边?

必填:

    0   1    2    3
0   w   x    y    z
1  NaN  NaN  1    2
2  NaN  10  20   30

1 个答案:

答案 0 :(得分:3)

在字符串行中混合使用数字,因此解决方案是在DataFrame.apply中将sortedkey参数一起使用:

df = df.apply(lambda x: pd.Series(sorted(x, key=pd.notna)), axis=1)
#alternative
#df = df.apply(lambda x: sorted(x, key=pd.notna), axis=1, result_type='expand')
print (df)

     0    1   2   3
0    w    x   y   z
1  NaN  NaN   1   2
2  NaN   10  20  30

如果所有值都是数字,则使用justify可以更快地解决问题:

df = pd.DataFrame({1: [1,2,None,None], 2: [10,20,30,None]}).T
print(df)
      0     1     2   3
1   1.0   2.0   NaN NaN
2  10.0  20.0  30.0 NaN

arr = justify(df.values, invalid_val=np.nan, side='right')
df = pd.DataFrame(arr, index=df.index, columns=df.columns)
print (df)
    0     1     2     3
1 NaN   NaN   1.0   2.0
2 NaN  10.0  20.0  30.0
相关问题