如何拆分DataFrame混合日期时间列并转换日期格式?
解决混合日期时间列的拆分与格式转换问题
没问题,我来帮你搞定这个需求!你的DataFrame里Date列混合了完整日期和单独时间,我们可以分步骤处理,既拆分出独立的日期、时间列,又把日期转换成你要的格式。
步骤1:准备示例数据
先把你的示例DataFrame创建出来:
import pandas as pd data = pd.DataFrame() data ['Date'] = ['Saturday 20th April 2019','12:30:00','12:30:00','15:00:00'] data ['Name'] = ['A','B','C','D']
步骤2:拆分并格式化日期列(Date1)
我们需要先识别出包含完整日期的行,将其转换成dd-mm-yyyy格式,再通过向前填充让下方的时间行继承最近的日期:
# 1. 将日期行转为datetime类型,非日期行自动设为NaN data['Date1'] = pd.to_datetime(data['Date'], errors='coerce') # 2. 将datetime格式转成你需要的dd-mm-yyyy字符串 data['Date1'] = data['Date1'].dt.strftime('%d-%m-%Y') # 3. 向前填充,让时间行获取上方最近的有效日期 data['Date1'] = data['Date1'].ffill()
步骤3:提取时间列(Time)
接下来提取单独的时间值,只保留包含冒号的时间格式行,其他行设为空字符串:
# 判断每行是否为时间格式(含冒号),是则保留原内容,否则为空 data['Time'] = data['Date'].where(data['Date'].str.contains(':'), '')
最终结果
运行完上述代码后,你的DataFrame会变成这样:
| Date | Name | Date1 | Time | |
|---|---|---|---|---|
| 0 | Saturday 20th April 2019 | A | 20-04-2019 | |
| 1 | 12:30:00 | B | 20-04-2019 | 12:30:00 |
| 2 | 12:30:00 | C | 20-04-2019 | 12:30:00 |
| 3 | 15:00:00 | D | 20-04-2019 | 15:00:00 |
补充说明
pd.to_datetime(..., errors='coerce')能把非日期格式的字符串转为NaN,方便后续筛选和填充操作;ffill()向前填充的逻辑,适配你的场景:时间行默认属于上方最近的日期,即使数据里有多个日期块(多组日期+时间行)也能正常工作;- 如果希望时间列的空值用
NaN而非空字符串,只需把代码里的''替换成pd.NA即可。
内容的提问来源于stack exchange,提问作者Zephyr
相关产品推荐
相关产品推荐

