如何在Pandas中为DataFrame的Year列指定值补零补全位数?
解决DataFrame中Year列值的替换问题
问题背景
我有一个包含Year列的DataFrame,原始数据如下:
Year 202 2021 2022 202 2019
需要实现的需求:将所有值为“202”的列值替换为“2020”,其余值保持不变,预期输出如下:
Year 2020 2021 2022 2020 2019
目前已编写代码:
df['Year_1'] = df['Year'].str.len()
几种可行的实现方法
方法1:直接值替换(最简洁)
利用Pandas的replace方法直接匹配目标值进行替换,无需额外计算长度:
# 若Year列是字符串类型 df['Year'] = df['Year'].replace('202', '2020') # 若Year列是数值类型,去掉引号即可 df['Year'] = df['Year'].replace(202, 2020)
方法2:结合已写的长度判断逻辑
既然已经计算了字符串长度,可以基于长度筛选出需要修改的行,补充字符:
# 字符串类型场景 df['Year'] = df.apply(lambda row: row['Year'] + '0' if len(row['Year']) == 3 else row['Year'], axis=1) # 数值类型场景,先转字符串处理再转回数值 df['Year'] = df['Year'].astype(str).apply(lambda x: x + '0' if len(x) == 3 else x).astype(int)
方法3:使用条件判断函数
借助NumPy的np.where实现条件替换,逻辑直观清晰:
import numpy as np # 字符串类型 df['Year'] = np.where(df['Year'] == '202', '2020', df['Year']) # 数值类型 df['Year'] = np.where(df['Year'] == 202, 2020, df['Year'])
内容的提问来源于stack exchange,提问作者anagha s
相关产品推荐
相关产品推荐

