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

标签 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 

谁能帮我提取那些无效日期?

预期输出:

    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_datetimefillna填写指定日期:

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/

相关文章:

R - 仅选择数据框的因子列

python - 排列矩形的顶点

python - 如何将 Pandas 数据框转换为具有混合数据类型和可能重复值的新格式

python - 如何跟踪pandas数据框中先前的日期记录列?

pandas - 如何为 "start_date"列和 "end_date"列中的每一行创建 pandas.date_range() ?

linux - 识别 Web 服务器上未使用的文件

database - 数据清洗: user entered database data tools

python - PyGi : How to use a GTKListBox with a GTKListStore?

python - 使用 MinGW 在 Windows 上构建 lxml

python - 如何在不改变其形状的情况下在pygame中旋转表面