Luu*_*v93 3 python datetime pandas
我有一个 excel 数据集,其中包含员工输入的工作时间的日期时间值。现在快年底了,他们想报告它,但它充满了错误的条目。因此我需要清理它。
以下是一些错误条目的示例。
面对此类数据集时,您的方法是什么?
我首先使用将日期列转换为日期时间 df['Shiftdatum'] = pd.to_datetime(df.Shiftdatum, format='%Y-%m-%d', errors='coerce')
在下面的示例数据中,它显示了一个 NaT
如何过滤掉这些 NaT,包括行的索引?
[Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
Timestamp('2019-03-11 00:00:00'),
NaT,
Timestamp('2019-03-12 00:00:00')
Run Code Online (Sandbox Code Playgroud)
初始样本数据:
{0: '2019-03-11 00:00:00',
1: '2019-03-11 00:00:00',
2: '2019-03-11 00:00:00',
3: '2019-03-11 00:00:00',
4: '2019-03-11 00:00:00',
5: '2019-03-11 00:00:00',
6: '2019-03-11 00:00:00',
7: '2019-03-11 00:00:00',
8: '2019-03-11 00:00:00',
9: '2019-03-11 00:00:00',
10: '2019-03-11 00:00:00',
11: '2019-03-11 00:00:00',
12: '2019-03-11 00:00:00',
13: '2019-03-11 00:00:00',
14: '2019-03-11 00:00:00',
15: '2019-03-11 00:00:00',
16: '33/11/2019',
17: '2019-03-12 00:00:00',
18: '2019-03-12 00:00:00',
19: '2019-03-12 00:00:00'}
Run Code Online (Sandbox Code Playgroud)
国际大学联盟,
您可以通过多种方式处理此问题,您可以使用pd.to_datetime(column,errors='coerce')数据并将其分配给新列
然后使用新列,您可以过滤NaT并获得唯一的异常值,
可以说这是结果:
data = ['033-10-2019', '100-03-2019','1003-03-2019','03-10-2019']
df = pd.DataFrame({'date_time' : data})
df['correct'] = pd.to_datetime(df['date_time'],errors='coerce')
print(df)
date_time correct
0 033-10-2019 NaT
1 100-03-2019 NaT
2 1003-03-2019 NaT
3 03-10-2019 2019-03-10
Run Code Online (Sandbox Code Playgroud)
现在 - 我们需要在date_timecol 中获取唯一的 NaT 值
errors = df.loc[df['correct'].isnull()]['date_time'].unique().tolist()
out : ['033-10-2019', '100-03-2019', '1003-03-2019']
Run Code Online (Sandbox Code Playgroud)
这是无聊的一点,您需要检查并修复错误并将正确的值传递给字典:
correct_dict = {'033-10-2019' : '03-10-2019', '100-03-2019' : '03-10-2019', '1003-03-2019' : '10-03-2019'}
Run Code Online (Sandbox Code Playgroud)
然后将值映射回您的数据帧:
df['correct'] = df['correct'].fillna(pd.to_datetime(df['date_time'].map(correct_dict)))
print(df)
date_time correct
0 033-10-2019 2019-03-10
1 100-03-2019 2019-03-10
2 1003-03-2019 2019-10-03
3 03-10-2019 2019-03-10
Run Code Online (Sandbox Code Playgroud)
如果您只想删除 NaT 值,您可以dropna在对列进行子集化的同时
df = df.dropna(subset=['correct'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1997 次 |
| 最近记录: |