代码之家  ›  专栏  ›  技术社区  ›  astro123

高级熊猫:如何在熊猫链接中应用NOTNULL?

  •  0
  • astro123  · 技术社区  · 7 年前

    我在使用TMDB数据集进行数据操作时遇到了以下问题。

    假设我有一个数据框,如下所示:

    import pandas as pd
    import ast
    
    df = pd.DataFrame({'rank': [1,2,3],
                     'belongs': [ "{'id': 1, 'name': 'Toy Story'}",
                                  "{'id': 3, 'name': 'Grumpy Old Men'}",
                                 np.nan
                                ]})
    
    print(df[df.belongs.notnull()])
    

    当我按顺序运行这些命令时,我得到了所需的特许权名称:

    fran = df['belongs'].copy()
    fran = fran[fran.notnull()]
    fran = fran.apply(ast.literal_eval)
    fran = fran.apply(lambda x: x['name'] if isinstance(x, dict) else np.nan)
    fran = fran[fran.notnull()]
    
    fran
    
    0         Toy Story
    1    Grumpy Old Men
    

    如何将这些命令连成一行?

    我试过这个:

    (df['belongs'].copy()
    .apply( lambda x: x[x.notnull()])
    .apply(ast.literal_eval)
    .apply(lambda x: x['name'] if isinstance(x, dict) else np.nan)
    .apply( lambda x: x[x.notnull()])
    )
    

    给出了错误:

    AttributeError: 'str' object has no attribute 'notnull'
    

    我试着把x改成pd。系列(x),但有些错误持续存在。

    如何链接给定的操作?

    1 回复  |  直到 7 年前
        1
  •  2
  •   BENY    7 年前

    一字排开

    df['belongs'].copy().loc[lambda x : x.notnull()].apply(ast.literal_eval).\
          apply(lambda x: x['name'] if isinstance(x, dict) else np.nan)
    Out[205]: 
    0         Toy Story
    1    Grumpy Old Men
    Name: belongs, dtype: object
    

    对于具体的下降,nan

     df['belongs'].copy().dropna()