如何移除Pandas DataFrame中的 并根据dd/mm/yyyy格式计算年龄?
解决方案:移除制表符并计算年龄
嘿,我来帮你搞定这两个问题!咱们一步一步来:
一、移除性别和出生日期字段前的制表符(\t)
你碰到的\t是制表符,应该是CSV文件本身的格式脏数据导致的。咱们直接用Pandas的字符串处理工具就能清理:
首先加载你的CSV数据:
import pandas as pd # 替换成你的CSV文件实际路径 df = pd.read_csv('your_dataset.csv')
然后针对目标字段,精准移除开头的制表符:
# 只移除字段开头的制表符,如果前后都有空白/制表符,把lstrip改成strip更全面 df['性别'] = df['性别'].str.lstrip('\t') df['出生日期'] = df['出生日期'].str.lstrip('\t')
要是字段里还混有空格,也可以用str.strip('\t ')同时处理制表符和空格,清理得更彻底。
二、根据dd/mm/yyyy格式的出生日期计算年龄
直接用年份相减会有误差(比如还没到当年生日的人年龄会多算1岁),咱们用更精准的方式计算:
首先把出生日期转换成Pandas的datetime类型(必须指定格式为dd/mm/yyyy,避免解析错误):
# 转换日期格式,errors='coerce'会把无效日期转为NaN,方便后续排查 df['出生日期'] = pd.to_datetime(df['出生日期'], format='%d/%m/%Y', errors='coerce')
然后计算真实年龄,这里有两种实用方法:
方法1:自定义函数(直观易懂)
from datetime import datetime def calculate_age(birth_date): today = datetime.today() # 先算年份差,再判断是否过了当年生日,没到的话年龄减1 return today.year - birth_date.year - ((today.month, today.day) < (birth_date.month, birth_date.day)) # 给数据集新增年龄列 df['年龄'] = df['出生日期'].apply(calculate_age)
方法2:纯Pandas操作(高效简洁)
today = pd.Timestamp.today() # 先计算年份差 df['年龄'] = today.year - df['出生日期'].dt.year # 筛选出还没过当年生日的行,年龄减1修正 mask = (df['出生日期'].dt.month > today.month) | ((df['出生日期'].dt.month == today.month) & (df['出生日期'].dt.day > today.day)) df.loc[mask, '年龄'] -= 1
额外小提示
如果CSV加载时就因为空格/制表符导致字段混乱,你可以试试在read_csv阶段提前处理:
df = pd.read_csv('your_dataset.csv', skipinitialspace=True, sep='\s*,\s*')
skipinitialspace=True会忽略字段开头的空格,sep='\s*,\s*'会匹配逗号前后的任意空白(包括制表符),可能从源头上减少格式问题。
内容的提问来源于stack exchange,提问作者Reub
相关产品推荐
相关产品推荐

