我正在尝试探索我拥有的数据,但我发现我的数据中有很多异常。数据框的日期列的日期类似于“12012-09-14”和“2500-09-28”。我想用“2250-05-05”替换它们。
我想在 df1 中保留有效日期,并将那些无效日期保留在列表中
df1:
col col2 date
1 b1a2 NaN
2 bal2 12012-09-14
3 a3l2 12017-09-14
4 a5l2 2019-09-24
5 a8l2 2012-09-28
6 a1l2 12113-09-14
7 a0l2 12012-09-24
8 a2l2 2500-09-28
9 a6l2 2500-09-14
10 a5l2 2012-09-24
谁能帮我提取那些无效日期?
预期输出:
col col2 date
0 1 b1a2 2250-05-05
1 2 bal2 2250-05-05
2 3 a3l2 2250-05-05
3 4 a5l2 2019-09-24
4 5 a8l2 2012-09-28
5 6 a1l2 2250-05-05
6 7 a0l2 2250-05-05
7 8 a2l2 2250-05-05
8 9 a6l2 2250-05-05
9 10 a5l2 2012-09-24
无效日期的唯一列表:
invalid_list = ['12012-09-14','12017-09-14','12113-09-14','12012-09-24','2500-09-28']
最佳答案
你可以使用 pd.to_datetime
和 fillna
填写指定日期:
new_date = pd.to_datetime("2250-05-05")
df['date'] = pd.to_datetime(df.date, errors='coerce').fillna(new_date)
col col2 date
0 1 b1a2 2250-05-05
1 2 bal2 2250-05-05
2 3 a3l2 2250-05-05
3 4 a5l2 2019-09-24
4 5 a8l2 2012-09-28
5 6 a1l2 2250-05-05
6 7 a0l2 2250-05-05
7 8 a2l2 2250-05-05
8 9 a6l2 2250-05-05
9 10 a5l2 2012-09-24
更新
为了获取列表中的无效日期:
to_dt = pd.to_datetime(df.date, errors='coerce')
invalid_list = df.loc[to_dt[to_dt.isna()].index, 'date'].dropna().values.tolist()
df['date'] = to_dt.fillna(new_date)
print(invalid_list)
['12012-09-14',
'12017-09-14',
'12113-09-14',
'12012-09-24',
'2500-09-28',
'2500-09-14']
关于python - 从数据框列中提取异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797267/