gpt4 book ai didi

python - 为什么 Python pandas 将任意时间信息分配给 datetime 对象?

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

Python pandas (0.24.1) 向我的日期时间对象添加看似任意数量的小时、分钟和秒。作为默认行为,这似乎出乎意料;我希望时间组件默认为午夜 (00:00:00)。这是错误吗?

import pandas as pd

df = pd.DataFrame( {'yr': [2019, 2019],
'mo': [9, 9],
'dy': [25, 26]} )

df['dtime'] = ( pd.to_datetime(df['yr'],format='%Y')
+pd.to_timedelta(df['mo']-1,unit='M')
+pd.to_timedelta(df['dy']-1,unit='d') )


print('pandas version == '+pd.__version__)
df

################################################
OUTPUT:
################################################

pandas version == 0.24.1
yr mo dy dtime
0 2019 9 25 2019-09-25 11:52:48
1 2019 9 26 2019-09-26 11:52:48

最佳答案

问题在于转换月份,这里使用 'rounded' 年(因为闰年)并除以 12 得到 'rounded'月份:

print (pd.to_timedelta(365.2425, unit='d') / 12)
30 days 10:29:06

print (pd.to_timedelta(1, unit='M'))
30 days 10:29:06

print (pd.to_timedelta(df['mo']-1,unit='M'))
0 243 days 11:52:48
1 243 days 11:52:48
Name: mo, dtype: timedelta64[ns]

更好的解决方案是使用 to_datetime使用 yearmonhtday 列,如有必要,使用 list(d.values()) 按子集过滤它>(如果真实数据中的另一列):

d = {'yr':'year', 'mo':'month', 'dy':'day'}
df['dtime'] = pd.to_datetime(df.rename(columns=d)[list(d.values())])

print (df)
yr mo dy dtime
0 2019 9 25 2019-09-25
1 2019 9 26 2019-09-26

关于python - 为什么 Python pandas 将任意时间信息分配给 datetime 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58524905/

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