如何将Pandas DataFrame中符合正则的字符串值转换为整数?
解决方案
可以通过pd.Series.apply配合匿名函数实现一行代码完成需求,逻辑清晰且能精准处理混合类型的列:
import numpy as np import pandas as pd import re testdf = pd.DataFrame({'col1':['abc','2023',456,789,'2021',4.5,'123',np.nan]}) # 核心一行代码 testdf['col1'] = testdf['col1'].apply(lambda x: int(x) if isinstance(x, str) and re.fullmatch(r'20\d{2}', x) else x)
代码逻辑说明
isinstance(x, str):先筛选出字符串类型的单元格,避免对int、float、NaN等非字符串类型做无效处理re.fullmatch(r'20\d{2}', x):精确匹配完整字符串为20开头的4位数字(确保只转换纯年份格式的字符串,不会误处理如'2023abc'这类包含年份的杂串)- 满足条件的字符串转为整数,其余值(包括非字符串类型、不符合正则的字符串、NaN)保持原类型和值不变
处理结果验证
处理后testdf['col1']的元素及类型如下:
| 元素 | 类型 |
|---|---|
| 'abc' | str |
| 2023 | int |
| 456 | int |
| 789 | int |
| 2021 | int |
| 4.5 | float |
| '123' | str |
| NaN | float |
完全符合需求:仅将符合格式的年份字符串转为整数,其余数据保持原样。
内容的提问来源于stack exchange,提问作者user1718097
相关产品推荐
相关产品推荐

