当我使用iloc将日期时间值设置为数据框单元格时,该值将更改
import datetime as dt
import pandas as pd
t = '2019-12-29 13:17:34.678000'
t = dt.datetime.fromisoformat(t)
print(t)
# 2019-12-29 13:17:34.678000
df = pd.DataFrame({'t': [t]})
print(df)
# t
# 0 2019-12-29 13:17:34.678
df.iloc[0, df.columns.get_loc('t')] = t
print(df)
# t
# 0 2019-12-29 13:17:34.678000128
为什么会这样?我该如何预防?
答案 0 :(得分:1)
您可以应用函数isoformat
,该函数会将时间缩短至毫秒,从而降低了微秒的精度:
t = dt.datetime.fromisoformat(t).isoformat(timespec='milliseconds')
有关同格式的详细信息,请遵循:https://docs.python.org/3/library/datetime.html#datetime.time.microsecond
请注意,如文档所述,排除的时间部分将被截断而不是四舍五入。
答案 1 :(得分:0)
这似乎是熊猫0.25.2
中的错误。最新版本1.0.1
中没有发生。
在0.25.2
中,可以使用.at
代替.iloc
t = '2019-12-29 13:17:34.678000'
t = dt.datetime.fromisoformat(t)
print(t)
# 2019-12-29 13:17:34.678000
df = pd.DataFrame({'t': [t]})
print(df)
# t
# 0 2019-12-29 13:17:34.678
df.at[0, 't'] = t
print(df)
# t
# 0 2019-12-29 13:17:34.678