如何使用Python Pandas修复包含两种行数据格式的DataFrame
解决方法
你可以通过识别日期表头行、向下填充日期、过滤冗余表头行三步完成转换,完整实现代码如下:
import pandas as pd import re # 生成测试数据 df = pd.DataFrame({ 'a': ['26/9/21', '10:00', '12:00', '27/9/21', '1:00'], 'b': ['26/9/21', 'Paul', 'John', '27/9/21', 'Ringo'] }) # 1. 识别日期表头行:匹配「日/月/年」格式的行,也可简化用 `df['a'] == df['b']` 直接适配当前测试场景 date_mask = df['a'].str.match(r'^\d{1,2}/\d{1,2}/\d{2}$') # 2. 新增日期列,将表头的日期向下填充到所有对应业务行 df['date'] = df['a'].where(date_mask).ffill() # 3. 过滤掉原有的日期表头行,调整列顺序得到最终结果 result = df[~date_mask][['date', 'a', 'b']].reset_index(drop=True) # 输出结构化结果 print(result)
运行上述代码输出如下,和你期望的格式一致:
date a b 0 26/9/21 10:00 Paul 1 26/9/21 12:00 John 2 27/9/21 1:00 Ringo
如果需要导出为和示例完全一致的空格分隔纯文本,可以补充调用以下代码:
print(result.to_csv(sep='\t', header=False, index=False))
内容的提问来源于stack exchange,提问作者Jeremy K.
相关产品推荐
相关产品推荐

