Pandas数据清洗:移除DataFrame中Year列的多余末尾零值
处理DataFrame中Year列的末尾多余零值
针对Year列(整数类型)存在的末尾多余零问题(如201400、2014000这类值),以下是几种实用的解决方法:
方法1:字符串处理法(简单直观)
将整数转为字符串,移除末尾所有零后再转回整数。代码简洁,适合中小数据集:
import pandas as pd # 假设你的DataFrame名为df df['Year'] = df['Year'].astype(str).str.rstrip('0').astype(int)
注意:如果列中存在0值,转字符串后rstrip会得到空字符串,此时需额外处理:
df['Year'] = df['Year'].astype(str).str.rstrip('0').replace('', '0').astype(int)
方法2:数学运算方法(纯整数操作)
通过循环除以10,直到数值不再能被10整除,避免字符串转换:
def strip_trailing_zeros(x): while x % 10 == 0 and x != 0: x = x // 10 return x df['Year'] = df['Year'].apply(strip_trailing_zeros)
这种方法适合需要保持纯整数运算逻辑的场景,但apply在超大数据集上效率略低。
方法3:矢量化数学操作(高效处理大数据)
利用numpy的矢量化运算替代循环,大幅提升大数据量下的处理速度:
import numpy as np # 排除0值,避免log10(0)报错 mask = df['Year'] != 0 # 计算每个非零值的末尾零个数 num_trailing_zeros = np.floor(np.log10(df['Year'][mask])).astype(int) - np.floor(np.log10(df['Year'][mask] % (10**np.floor(np.log10(df['Year'][mask]))))).astype(int) # 移除末尾零 df.loc[mask, 'Year'] = df.loc[mask, 'Year'] // (10 ** num_trailing_zeros)
该方法通过向量化操作避免了逐行循环,适合处理百万级以上数据量的DataFrame。
内容的提问来源于stack exchange,提问作者bbb12543
相关产品推荐
相关产品推荐

