【问题标题】:spliting a data frame and then saving them into two separate dfs in python拆分数据框,然后将它们保存到 python 中的两个单独的 dfs
【发布时间】:2017-12-12 14:31:17
【问题描述】:

我有一个熊猫数据框,其列为id,program,name,add 一些记录没有 nameadd 列的任何值(即包含 NaN 值)。 我想把这个数据框分成两个,这样第一个 df1 包含id,program,name,add 下的所有值,即没有空值(只有那些在每列下包含值的记录);第二个 df2 仅包含那些在 nameadd 列下都没有值的记录。如果nameadd 中的任何一个有任何值,那么它应该进入df1,df2 应该只包含那些两列都有NaN 值的记录。

这个问题对某些人来说可能看起来很愚蠢,但我刚刚开始使用 python,所以还是个新手。

示例数据如下所示:

id, program,name,add
142, FOO, Sherlock, Baker street
934, FOOFOO, Harry, Hogwards
229, ABC,NaN,NaN
420, XYZ,NaN,USA
619, DEF,NaN,NaN

想要的输出应该是这样的:

df1:

id,program,name,add
142, FOO, Sherlock, Baker street
934, FOOFOO, Harry, Hogwards
420, XYZ,NaN,USA

df2:

id,program,name,add
229, ABC,NaN,NaN
619, DEF,NaN,NaN

提前致谢。

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    boolean indexingisnull (isna) 创建的mask 一起使用,然后检查DataFrame.all 每行的所有Trues:

    mask = df[['name','add']].isnull().all(axis=1)
    #pandas 0.21.0+
    #mask = df[['name','add']].isna().all(axis=1)
    print (mask)
    0    False
    1    False
    2     True
    3    False
    4     True
    dtype: bool
    
    df1 = df[~mask]
    df2 = df[mask]
    
    print (df1)
        id program      name           add
    0  142     FOO  Sherlock  Baker street
    1  934  FOOFOO     Harry      Hogwards
    3  420     XYZ       NaN           USA
    
    print (df2)
        id program name  add
    2  229     ABC  NaN  NaN
    4  619     DEF  NaN  NaN
    

    详情:

    print (df[['name','add']].isnull())
        name    add
    0  False  False
    1  False  False
    2   True   True
    3   True  False
    4   True   True
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多