使用Pandas结合datefinder从列字符串中提取日期遇报错如何解决
问题原因
- 你对
df['SECURITY PASS DATE']单列调用apply方法时,传入lambda的参数x已经是该列每行的字符串值,你尝试对字符串用x['SECURITY PASS DATE']取索引,自然触发“String indices must be integers”报错。 find_dates是datefinder库的内置方法,不是pandas DataFrame的方法,不能用df.find_dates调用。
修正实现代码
首先确保你已经安装了依赖库:
pip install datefinder
完整处理逻辑如下:
import pandas as pd from datefinder import DateFinder # 初始化日期提取实例 dt_finder = DateFinder() def extract_dates(text: str) -> list: # 提取所有日期并转为你需要的DD/MM/YYYY字符串格式 return [dt.strftime("%d/%m/%Y") for dt in dt_finder.find_dates(text)] # 新增列存储提取到的日期列表 df["SECURITY INTERVIEW DATE"] = df["SECURITY PASS DATE"].apply(extract_dates) # 若需要把多个日期拆分为单独列,可追加以下代码 date_split = df["SECURITY INTERVIEW DATE"].apply(pd.Series) date_split.columns = [f"EXTRACTED_DATE_{i+1}" for i in date_split.columns] df = pd.concat([df, date_split], axis=1)
输出说明
处理后你的示例数据会生成如下对应结果:
| SECURITY PASS DATE | EXTRACTED_DATE_1 | EXTRACTED_DATE_2 |
|---|---|---|
| applied on 11/10/2021. need to follow up on 01/12/2021 | 11/10/2021 | 01/12/2021 |
| completed on 19/10/2021. need to renew on 01/12/2022 | 19/10/2021 | 01/12/2022 |
| applied on 01/12/2021. | 01/12/2021 | NaN |
内容的提问来源于stack exchange,提问作者Mr Paul
相关产品推荐
相关产品推荐

