gpt4 book ai didi

python - 如何用 pandas 中的有效日期替换超出范围的日期

转载 作者:太空宇宙 更新时间:2023-11-03 19:55:02 25 4
gpt4 key购买 nike

我有一个包含 10,000 个条目的数据集,其中一个变量是生日。所有条目都是独一无二的。我注意到大约 200 个条目的生日为 1/1/1900。下一个频繁日期的频率仅为 4,并且该日期在此数据集中也没有任何意义。我认为 1/1/1900 被用作占位符,因为生日不能留空。长话短说,我想使用回填方法将这些条目的日期替换为有效日期。

我将生日列更改为日期时间对象:

df['Client Birthdate'] = pd.to_datetime(df['Client Birthdate'], yearfirst=True)

然后我尝试使用:

timestamp = pd.Timestamp(year=1900, month=1, day=1)
df['Client Birthdate'] = df['Client Birthdate'].replace(to_replace=timestamp, method='bfill')

但是,df['Client Birthdate'].describe() 仍然给了我这个输出:

[198 rows x 9 columns]
count 10000
unique 7897
top 1900-01-01 00:00:00
freq 198
first 1900-01-01 00:00:00
last 1999-12-30 00:00:00
Name: Client Birthdate, dtype: object

所以我尝试使用:

df['Client Birthdate'] = df['Client Birthdate'].replace(to_replace=timestamp, value=False)
df['Client Birthdate'] = df['Client Birthdate'].fillna(method='bfill')

这给了我:

[198 rows x 9 columns]
count 10000
unique 7897
top False
freq 198
Name: Client Birthdate, dtype: object

我不知道为什么替换/填充娜不起作用,它们与日期时间对象不兼容吗?还有一种方法可以用有效日期替换所有“超出范围”的日期,比如 1920 年之前和 2001 年之后的生日?

最佳答案

我也尝试过替换,我认为问题是因为与正则表达式匹配,无论如何你都可以用以下方法解决:

df["Client Birthday"].loc[df["Client Birthday"].eq(timestamp)] = np.nan
df["Client Birthday"] = df["Client Birthday"].bfill()

我指定了 NaT(不是时间),其中“客户生日”等于 timestamp 变量,然后在该系列上使用了 bfill

对于你的第二个问题,你可以使用 pandas between time并创建一系列可接受的日期。然后,如果任何内容超出范围,您可以填充这些值或用更合理的值替换它们。

关于python - 如何用 pandas 中的有效日期替换超出范围的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59590932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com