Vam*_*ala 1 python pandas data-cleaning
我正在尝试浏览我拥有的数据,但是我发现数据中存在很多异常情况。数据框的日期列的日期为“ 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
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我如何提取那些无效的日期吗?
预期产量:
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
Run Code Online (Sandbox Code Playgroud)
无效日期的唯一列表:
invalid_list = ['12012-09-14','12017-09-14','12113-09-14','12012-09-24','2500-09-28']
Run Code Online (Sandbox Code Playgroud)
您可以使用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
Run Code Online (Sandbox Code Playgroud)
更新资料
为了获得列表中的无效日期:
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']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |