忽略pandas数据帧中的nat值。

8 浏览
0 Comments

忽略pandas数据帧中的nat值。

我合并了两个数据框,结果如下:\n

 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]

\n我想要移除所有的NaT,所以期望的结果是:\n

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

\n我尝试了下面的代码,但是没有起作用(逗号和方括号依然存在):\n

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

\n有什么建议吗?

0
0 Comments

问题的出现原因:DataFrame中存在NaN值(Not a Number)和NaT值(Not a Time),但是这些值被嵌入在列表中的单元格中,导致在处理数据时产生了问题。

解决方法:通过编写函数来替换NaN和NaT值,然后对DataFrame中的特定列应用这些函数来进行替换。具体步骤如下:

1. 编写replaceNaTsvalue函数来替换列表中的NaN和NaT值。该函数遍历每个列表中的元素,如果元素不是NaN或NaT,则将其添加到新的列表中。最后,如果新的列表长度大于0,则将其返回;否则,返回一个空字符串。

2. 编写replace_all_NaTs函数来对DataFrame中的指定列应用replaceNaTsvalue函数进行替换。该函数遍历指定的列名,在DataFrame中获取对应列的数据,并将其传递给replaceNaTsvalue函数进行处理。处理后的结果再赋值给原DataFrame中的对应列。

3. 执行replace_all_NaTs(['CF', 'VPC'], df)代码,即对DataFrame df 中的'CF'和'VPC'列应用replace_all_NaTs函数进行替换。

最终结果:经过替换后,DataFrame中的NaN和NaT值被成功替换。列表中的NaN和NaT值被删除,只保留有效的日期值。

文章整理如下:

给定一个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

DataFrame如下所示:

    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]  

由于NaN和NaT值嵌入在DataFrame行的单元格列表中,可以按照以下步骤进行处理:

首先定义replaceNaTsvalue函数,用于替换列表中的NaN和NaT值。该函数遍历每个列表中的元素,如果元素不是NaN或NaT,则将其添加到新的列表中。最后,如果新的列表长度大于0,则将其返回;否则,返回一个空字符串。

然后定义replace_all_NaTs函数,用于对DataFrame中的指定列应用replaceNaTsvalue函数进行替换。该函数遍历指定的列名,在DataFrame中获取对应列的数据,并将其传递给replaceNaTsvalue函数进行处理。处理后的结果再赋值给原DataFrame中的对应列。

最后执行replace_all_NaTs(['CF', 'VPC'], df)代码,即对DataFrame df 中的'CF'和'VPC'列应用replace_all_NaTs函数进行替换。

经过替换后,DataFrame中的NaN和NaT值被成功替换。列表中的NaN和NaT值被删除,只保留有效的日期值。

最终结果如下:

    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]

以上就是解决问题"忽略DataFrame中的NaT值"的方法和步骤。通过编写相应的函数来替换NaN和NaT值,并对DataFrame中的指定列进行处理,最终实现了忽略NaT值的目标。

0