Skip to main content
 首页 » 编程设计

python之从数据框列中提取异常

2025年05月04日11jpfss

我正在尝试探索我拥有的数据,但我发现我的数据中有很多异常。数据框的日期列的日期类似于“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']