You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:07:49