【问题标题】:Filtering and manipulating "None" or "Null" rows in Pandas dataframe过滤和操作 Pandas 数据框中的“无”或“空”行
【发布时间】:2020-09-22 18:45:09
【问题描述】:

因此,如果该行为空,我会尝试为列中的一行分配一个新值。我试图检查是否有空行,然后写入操作语句,但它似乎不起作用。例如,如果 A 列等于“Big”,B 列是“None”,那么我希望 B 列中的该行等于“Tall”。如果 B 列已经有值,那就没问题了。任何帮助将不胜感激!

示例数据框:

Column A    Column B
   Big         None
   Big         Tall
   Small       Short
   Medium      None
   Small       None
   Medium      Average

我尝试过的代码:


df.loc[df['Column B'].isnull(), 'Column B'] = 'Fill' #used to fill in the "None Type" rows?
df['Column A'] = df['Column A'].astype(str)
for row in df.iterrows():
    if df.loc[df['Column B'].str.contains('Fill'):
       df.loc[df['Column A'].str.contains('Big'), 'Column B'] = 'Tall'
       df.loc[df['Column A'].str.contains('Medium'), 'Column B'] = 'Average'
       df.loc[df['Column A'].str.contains('Small'), 'Column B'] = 'Short'

但是,这失败了。只是试图用上面从 A 列值确定的相应值替换“无”B 列值。

【问题讨论】:

    标签: python pandas numpy dataframe null


    【解决方案1】:

    这样的事情可以解决问题

    map = {'Big':'Tall','Medium':'Average','Small':'Short',}
    
    def fill(data):
        if data['Column B'] is None  :
            data['Column B'] = map[data['Column A']]
        return data
    
    df.apply(fill,1)
    

    【讨论】:

      【解决方案2】:

      如果您有一组您需要的替换,您可以使用pd.Series.replace 创建一列您想用作默认值的值。然后,您可以使用pd.Series.fillna 填充 NaN 值,丢失数据的对齐和首选备份会自动发生,因为它们都具有相同的索引。

      在你的情况下:

      replacements = {
          'Big': 'Tall',
          'Medium': 'Average',
          'Small': 'Short',
      }
      
      backups = df['Column A'].replace(replacements)
      df['Column B'] = df['Column B'].fillna(backups)
      

      为此,您需要确保 B 列中的所有缺失值都编码为 <NA>(或 Pandas 1.0.0 之前的 NaN)在尝试 fillna 操作之前 em>。

      在熊猫中 >= 1.0.0:

      df['Column B'] = df['Column B'].astype('string')
      

      在 1.0.0 之前的 pandas 版本中:

      df['Column B'] = df['Column B'].replace({'None': np.nan, None: np.nan})
      

      有关更多信息,请参阅Working with Text Data (same section, pandas <= 1.0.0) 上的文档

      【讨论】:

        猜你喜欢
        • 2017-04-14
        • 2019-03-29
        • 2018-06-07
        • 2021-08-30
        • 1970-01-01
        • 2018-03-27
        • 1970-01-01
        • 2023-03-14
        • 2021-12-19
        相关资源
        最近更新 更多