删除 NaN 'Cells' 而不删除整个 ROW (Pandas,Python3)

新手上路,请多包涵

现在我有一个这样的DF

  Word       Word2          Word3
 Hello      NaN            NaN
 My         My Name        NaN
 Yellow     Yellow Bee     Yellow Bee Hive
 Golden     Golden Gates   NaN
 Yellow     NaN            NaN

我希望的是从我的数据框中删除所有 NaN 单元格。所以最后,它看起来像这样,其中“Yellow Bee Hive”已移动到第 1 行(类似于从 excel 中的列中删除单元格时发生的情况):

    Word       Word2             Word3
1  Hello      My Name        Yellow Bee Hive
2  My         Yellow Bee
3  Yellow     Golden Gates
4  Golden
5  Yellow

不幸的是,这些都不起作用,因为它们删除了整个行!

  df = df[pd.notnull(df['Word','Word2','Word3'])]

或者

 df = df.dropna()

有人有什么建议吗?我应该重新索引表格吗?

原文由 user3682157 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 608
1 个回答

我认为你可以使用这个:

 df = df.apply(lambda x: pd.Series(x.dropna().values))

例如:

 import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Word':['Hello', 'My', 'Yellow', 'Golden', 'Yellow'],
    'Word2':[np.nan, 'My Name', 'Yellow Bee', 'Golden Gates', np.nan],
    'Word3':[np.nan, np.nan, 'Yellow Bee Hive', np.nan, np.nan]
})

print(df)

初始数据框:

      Word         Word2            Word3
0   Hello           NaN              NaN
1      My       My Name              NaN
2  Yellow    Yellow Bee  Yellow Bee Hive
3  Golden  Golden Gates              NaN
4  Yellow           NaN              NaN

并应用此 lambda 函数:

 df = df.apply(lambda x: pd.Series(x.dropna().values))

print(df)

给出:

      Word         Word2            Word3
0   Hello       My Name  Yellow Bee Hive
1      My    Yellow Bee              NaN
2  Yellow  Golden Gates              NaN
3  Golden           NaN              NaN
4  Yellow           NaN              NaN

然后你可以用空字符串填充 NaN 值:

 df = df.fillna('')

print(df)

     Word         Word2            Word3
0   Hello       My Name  Yellow Bee Hive
1      My    Yellow Bee
2  Yellow  Golden Gates
3  Golden
4  Yellow

原文由 Serhii 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题