【问题标题】:Ignore nat values in a dataframe pandas忽略数据框 pandas 中的 nat 值
【发布时间】:2021-04-30 05:50:13
【问题描述】:

我结合了两个数据帧,作为输出,我得到了这个结果:

 Proj    CF  VPC
0   A   [2021-01-26]  [NaT,2019-03-18]
1   B   [NaT]  [2016-03-18,2018-03-24]
2   C   [NaT,NaT]  [2018-01-26,NaT]

所以我想删除所有的 NaT ,所以预期的结果是:

Proj    CF  VPC
    0   A   [2021-01-26]  [2019-03-18]
    1   B                 [2016-03-18,2018-03-24]
    2   C                 [2018-01-26]

我尝试使用下面的这段代码,但它不起作用(逗号和 [] 保留):

df.fillna('', inplace=True)
df 

有什么建议吗?

【问题讨论】:

  • 你看过这个Pandas Replace NaN with blank/empty string 是否有可能的解决方案
  • 这能回答你的问题吗? Pandas Replace NaN with blank/empty string
  • @itprorh66 是的,我尝试使用此代码,但它不起作用,因为在我的情况下,我想用任何内容替换 NaT,即使使用 '' 因为当数据帧组合时,如果单元格中有东西(nan 或 NaT 或空格)它会产生不好的结果
  • 我不明白。您使用图像显示组合数据帧的结果,如果然后将组合 DataFrame 中的 NaN 值替换为“”并输出到 excel,您应该得到所需的结果。你是什​​么意思它会产生不好的结果?
  • @itprorh66 我添加了我在问题中尝试过的代码,我的意思是“糟糕的结果”NaT 仍然存在!

标签: python-3.x excel pandas removing-whitespace


【解决方案1】:

现在您已经进一步解释了问题。给定一个像这样的 DataFrame:

di = {'Proj':['A', 'B', 'C'], 'CF':[[pd.to_datetime('2021/01/26')], [pd.to_datetime(np.nan)], [pd.to_datetime(np.nan), pd.to_datetime(np.nan)] ], 
      'VPC':[[pd.to_datetime(np.nan), pd.to_datetime('2019/03/18')], [pd.to_datetime('2016/03/18'), pd.to_datetime('2018/03/24')], [pd.to_datetime('2018/03/26'), pd.to_datetime(np.nan)]]}
df = pd.DataFrame(di)
df

框架看起来像:

    Proj    CF                  VPC
0   A   [2021-01-26 00:00:00]   [NaT, 2019-03-18 00:00:00]
1   B   [NaT]                   [2016-03-18 00:00:00, 2018-03-24 00:00:00]
2   C   [NaT, NaT]              [2018-03-26 00:00:00, NaT]  

由于 NaT 嵌入在 Frame Row 单元格列表中,我将按如下方式进行:

def replaceNaTsvalue(col_data):
    rslt = []    
    for row in col_data:
        row_data = []
        for itm in row:
            if not pd.isnull(itm):
                row_data.append(itm)
        
        if len(row_data) > 0:
            rslt.append(row_data)
        else: 
            rslt.append(' ')
    return rslt  

def replace_all_NaTs(cols, dx):
    for col_name in cols:
        rslt = replaceNaTsvalue(dx[col_name])
        dx[col_name] = rslt
    return dx

现在通过执行:

replace_all_NaTs(['CF', 'VPC'], df)  

生成的 DF 如下所示:

    Proj    CF                  VPC
0   A   [2021-01-26 00:00:00]   [2019-03-18 00:00:00]
1   B                           [2016-03-18 00:00:00, 2018-03-24 00:00:00]
2   C                           [2018-03-26 00:00:00]

【讨论】:

  • 我想我忘了提到当我应用代码时我有昏迷和 [],所以我改变了我的问题更清楚
  • 是的,它正在工作,非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2021-10-24
  • 2018-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2018-03-13
  • 2017-11-24
  • 2020-05-06
相关资源
最近更新 更多