【问题标题】:Filling up "None" values in pandas dataframe with values from previous column用上一列中的值填充熊猫数据框中的“无”值
【发布时间】:2022-01-21 12:45:37
【问题描述】:

我正在调用一个返回 JSON 文件的 API。当我将 JSON 文件解析为 pandas 数据框时,它会返回下表:

Level 1 Level 2 Level 3
Total Category1 Category 1.2
Total None None
Total Category 2 None
Total Category 2 Category 2.1
Total Category 3 None
Total Category 3 Category 3.1

如您所见,类别分为三个级别。我想用之前列中的值替换列中的“无”值。数据框应如下所示:

Level 1 Level 2 Level 3
Total Category1 Category 1.2
Total Total Total
Total Category 2 Category 2
Total Category 2 Category 2.1
Total Category 3 Category 3
Total Category 3 Category 3.1

我已经尝试了一些循环和以下代码:

for i in range(len(df.columns)):
   df.iloc[:,i] = np.where(df.iloc[:,i] == "None",df.iloc[:,i+1],df.iloc[:,i])

但这不起作用。我怎样才能做到这一点?

谢谢!

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    确保您的None 实际上是np.nan,然后您的任务将变得简单,因为沿ffill(axis=1) 列的前向填充将满足您的需求:

    df.replace('None',np.nan,inplace=True)
    df_f = df.ffill(axis=1)
    
    print(df_f)
    
      Level 1     Level 2       Level 3
    0   Total   Category1  Category 1.2
    1   Total       Total         Total
    2   Total  Category 2    Category 2
    3   Total  Category 2  Category 2.1
    4   Total  Category 3    Category 3
    5   Total  Category 3  Category 3.1
    

    【讨论】:

      【解决方案2】:

      DataFrame.ffill 适用于 Python None 对象。通过axis=1 跨列填充:

      filled = df.ffill(axis=1)
      
      print(filled)
        Level 1     Level 2       Level 3
      0   Total   Category1  Category 1.2
      1   Total       Total         Total
      2   Total  Category 2    Category 2
      3   Total  Category 2  Category 2.1
      4   Total  Category 3    Category 3
      5   Total  Category 3  Category 3.1
      

      【讨论】:

        猜你喜欢
        • 2020-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 2020-11-26
        • 1970-01-01
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        相关资源
        最近更新 更多