python - Python pandas 按日期过滤以删除列中不包含日期的所有行
问题描述
我有一个数据不整洁的 excel 文件,我想使用 pandas 函数来清理它。
A 列(时间)包含不同的文本——一些是时间,一些是日期,还有一些是人名。
Time
========
Dan
-------
12:55
-------
04 Oct 2019
因此,在上面的示例中,我只想按日期过滤 - 所以 2019 年 10 月 4 日将是我的选择。
我考虑过将日期转换为日期格式,然后通过它进行过滤。
df['Time'] = pd.to_datetime(df['Time'],format='%d %b %Y')
但因为并非所有行都包含日期,所以我收到错误
ValueError:时间数据“12:55”与格式“%d %b %Y”不匹配(匹配)
首先,这是过滤它的最佳方法,如果是这样,我如何跳过非日期值进行转换?
解决方案
谢谢@Serge Ballesta 的评论:
在同一列中混合仅包含日期部分的值和仅包含时间(小时、分钟、...)的值将导致难以处理列...
因此,如果有 2 种不同格式的 DataFrame,这是可能的解决方案,因此可以使用 单独解析它们errors='coerce'
,如果没有创建匹配缺失值NaN
。
所以可以通过秒替换缺失Series
值Series.fillna
date1 = pd.to_datetime(df['Time'],format='%d %b %Y', errors='coerce')
date2 = pd.to_datetime(df['Time'],format='%H:%M', errors='coerce')
df['Time'] = date1.fillna(date2)
print (df)
Time
0 NaT
1 1900-01-01 12:55:00
2 2019-10-04 00:00:00
对于过滤非日期时间过滤行在转换后缺少值boolean indexing
:
df1 = df[date1.fillna(date2).isna()]
print (df1)
Time
0 Dan
推荐阅读
- flutter - 如何将值从initstate传递给flutter中的小部件
- r - 使用 R 进行网页抓取:看不到可下载的链接
- oracle-apex - 交互式网格在过滤或排序时不显示任何结果
- c# - 使用 C# 在 minio 中添加用户
- r - 从 R 中的并行进程使用 fwrite 写入是否需要锁?
- python - 将串行数据从 Arduino 读入 Python
- javascript - 优化慢 mongoDB 查询,让它更快?
- python-3.x - 尝试使用 selenium 查找 iframe 时出现问题
- reactjs - 调度不是 createSlice() 的函数错误
- sql - ErrorDate参数将ssrs格式化为存储过程?