gpt4 book ai didi

python - 优雅高效的方式保留日期值,没有 OOB 错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:53:01 25 4
gpt4 key购买 nike

我有一个如下所示的数据框

df1_new = pd.DataFrame({'person_id': [1, 1, 3, 3, 5, 5],'obs_date': ['7/23/2377  12:00:00 AM', 'NA-NA-NA NA:NA:NA', 'NA-NA-NA NA:NA:NA', '7/27/2277  12:00:00 AM', '7/13/2077  12:00:00 AM', 'NA-NA-NA NA:NA:NA']})

enter image description here

如您所见,我的日期值中有几个是越界值。但是,我仍然想保留它们的原样。不幸的是,由于 OOB 问题我不能

我在下面试过

pd.to_datetime(df1_new['obs_date'], format='%m/%d/%Y %I:%M:%S %p', errors='coerce')

enter image description here

除了单独更改格式外,还有其他有效的方法可以按原样保留日期值吗?如果它可以是字符串列/数据类型我很好

我希望我的输出如下所示。

enter image description here

更新了 try/except 截图

enter image description here

最佳答案

您可以将值转换为日期时间,然后再转换为日期 Period,以便在 pandas 中仅使用可能的格式来表示 越界 值。

如果省略它,则使用 python 日期时间对象,而不是 pandas 日期时间(时间戳)。

from datetime import datetime
def str2time(x):
try:
return pd.Period(datetime.strptime(x, '%m/%d/%Y %I:%M:%S %p'), 'D')
except:
return np.nan

df1_new['obs_date'] = df1_new['obs_date'].apply(str2time)
print(df1_new)
person_id obs_date
0 1 2377-07-23
1 1 NaT
2 3 NaT
3 3 2277-07-27
4 5 2077-07-13
5 5 NaT

print(df1_new['obs_date'].dtype)
period[D]

如果可能的话,多种格式:

def str2time(x):
try:
#MM/DD/YYYY II:MM:SS pp like 7/23/2377 12:00:00 AM
return pd.Period(datetime.strptime(x, '%m/%d/%Y %I:%M:%S %p'), 'D')
except:
try:
#YYYY-MM-DD HH:MM:SS like 2377-07-23 00:00:00
return pd.Period(datetime.strptime(x, '%Y-%m-%d %H:%M:%S'), 'D')
except:
return np.nan

df1_new['obs_date'] = df1_new['obs_date'].apply(str2time)

关于python - 优雅高效的方式保留日期值,没有 OOB 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57550238/

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