pandas dataframe日期列00开头年份使用replace替换无效果如何解决
问题原因
- 未明确指定操作列:原始写法对全表执行正则替换,非字符串类型的列(如datetime类型的date_2、date_3)不会被正则匹配命中,若date_1实际为自动解析的日期类型而非字符串类型,也会导致替换失效,可执行
print(my_df['date_1'].dtype)确认列类型,输出为object才是字符串类型。 - 正则规则不严谨:原始写法没有锚定年份位置,若字符串其他位置出现
0020会被误替换。
解决方案
方案1:date_1为字符串类型(推荐,仅操作目标列性能更高)
使用pandas字符串列专用的str.replace方法,锚定字符串开头匹配年份前缀:
my_df['date_1'] = my_df['date_1'].str.replace(r'^0020', '2020', regex=True)
方案2:date_1为datetime类型
先转成字符串做替换,再转回日期格式:
import pandas as pd my_df['date_1'] = pd.to_datetime(my_df['date_1'].astype(str).str.replace(r'^0020', '2020'))
方案3:需全表所有字符串列替换
如果要对所有字符串列的0020前缀做统一替换,使用全表replace的正确写法:
my_df = my_df.replace(to_replace=r'^0020', value='2020', regex=True)
替换完成后可直接打印my_df['date_1']验证修改结果。
内容的提问来源于stack exchange,提问作者Priya Chauhan
相关产品推荐
相关产品推荐

