如何根据 Python Pandas 中的重要情况将数字转换为出生日期?

霍乱

我在 Python Pandas 中有数据框,如下所示:

number
----------
54062903812
96120309725
00021201044
00346

我需要创建新列,我需要将每个值的前 6 个元素从“数字”列转换为生日日期:例如:

  • 值 1 和 2 表示出生年份

  • 出生 3 个月和 4 个月的值

  • 值 5 和 6 天出生

    • 54062903812 = 1954-06-29
    • 96120309725 = 1996-12-03
    • 00021201044 = 2000-02-12

目前我使用下面的函数来做到这一点,但是这个函数有一个很大的问题,因为它返回 54062903812 是 2054-06-29 但它当然应该是 1954-06-29,当然这是不可能的。我的代码:

df["birthday"] = pd.to_datetime(df["number"].str[:6], format='%y%m%d', errors='coerce')

如何修改我的代码以便能够识别:

  • 如果它从 <0 开始,则为 1900
  • 如果从 >=0 开始,则为 2000

** 请注意,我只需要转换具有 11 个元素的“数字”列中的这些值!

耐多药

如果您可以从您的数据中假设任何 00 到 21 是 2000 到 2021,您可以尝试下面的代码。这是一个想法。

import pandas as pd

df = pd.DataFrame({'Col1': {0: 54062903812, 1: 96120309725, 2: 21201044}})

def addYear(x):
    years = ['00' , '01' , '02' , '03' , '04' , '05' , '06' , '07' , '08' , '09' , '10' , '11' , '12' , '13' , '14' , '15' , '16' , '17' , '18' , '19' , '20' , '21' , '22']
    x = str(x)
    if x[:2] in years:
        x = '20' + x
    else:
        x = '19' + x
    x = pd.to_datetime(x[:7], format='%Y%m%d')
    return x

df['Date1'] = df.apply(lambda x: addYear(x['number']), axis=1)

print(df)


   number         Date1
0  54062903812  1954-06-02
1  96120309725  1996-01-20
2  21201044     2021-02-01

更新:

如果 len(x) < 11,则来自评论:

import pandas as pd

df = pd.DataFrame({'Col1': {0: 54062903812, 1: 96120309725, 2: 21201044, 3: 1234}})

def addYear(x):
    years = ['00' , '01' , '02' , '03' , '04' , '05' , '06' , '07' , '08' , '09' , '10' , '11' , '12' , '13' , '14' , '15' , '16' , '17' , '18' , '19' , '20' , '21' , '22']
    x = str(x)
    if len(x) < 11:
        return 0
    else:
        if x[:2] in years:
            x = '20' + x
        else:
            x = '19' + x
        x = pd.to_datetime(x[:7], format='%Y%m%d')
        return x

df['Date1'] = df.apply(lambda x: addYear(x['Col1']), axis=1)

print(df)


          Col1                Date1
0  54062903812  1954-06-02 00:00:00
1  96120309725  1996-01-20 00:00:00
2     21201044                    0
3         1234                    0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何根据 Python Pandas 中定义的条件将字符串转换为定义格式的日期?

如何使用python pandas根据日期打印一行?

如何根据 Python Pandas 中的 PESEL 数计算年龄?

如何根据生日日期、Python Pandas 中的时间戳和日期时间问题计算年龄?

根据Angular 8中的nric数字显示出生日期

如何使用Mongoose在Node JS中将此出生日期转换为年龄

根据出生日期计算年龄

根据出生日期计算年龄

如何在MySQL中根据出生日期计算年龄?

如何在SQL中根据出生日期计算年龄(以年为单位)

如何使用php在MySQL中插入出生日期?

Python Pandas:如何根据“ OR”条件进行合并?

Python Pandas:如何根据过滤器将数字序列分配为列?

如何在 Python 中一次根据唯一值的数量将 Pandas 数据框列的值转换为数字表示?

如何根据字符串列在python pandas中设置日期时间列的时间

如何将Pandas DataFrame转换为Python中的列

Python(pandas):如何根据列中的值将每一行除以“绝对”行

Python Pandas:如何根据日期组合或合并两个不同大小的数据框

python - 如何在Python Pandas中根据一列中的日期和第二列中的NaN选择列?

如何根据其他列中的数据替换python pandas中的某些值?

如何根据 Python Pandas 中功能参数的值定义数据框中的名称和列数?

如何根据 Python Pandas 中名称的开头管理 Data Frame 中的列顺序?

如何根据与python pandas中前一行的差异来移动列值?

如何根据python pandas数据帧中的给定N生成随机数并添加前缀?

如何根据来自多列的数据在Pandas Python中在一幅图中绘制多条线?

Python:Pandas:如何根据Groupby在另一列中查找最大值

如何根据列值比较在python中过滤Pandas数据框?

如何使用python / pandas根据一列中的字符串拆分和复制行?

如何根据pandas python中的条件在两个不同的数据帧之间进行列操作