忽略数据框中的 nat 值 pandas
Ignore nat values in a dataframe pandas
我组合了两个数据帧,作为输出我得到了这个结果:
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
有什么建议吗?
既然你已经进一步解释了问题。给定一个 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 嵌入在框架行单元格列表中,我将按如下方式进行:
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]
我组合了两个数据帧,作为输出我得到了这个结果:
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
有什么建议吗?
既然你已经进一步解释了问题。给定一个 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 嵌入在框架行单元格列表中,我将按如下方式进行:
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]