我正在从我的API中获取iso格式的日期。
我正在做的事情:
df = DataFrame(results)
df.to_csv(path_or_buf=file_name, index=False, encoding='utf-8',
compression='gzip',
quoting=QUOTE_NONNUMERIC)
例如,我查看CSV:
lastDeliveryDate
2018-11-21 16:25:53.990000-05:00
但是,
当我这样做时:
df = DataFrame(results)
df.to_json(path_or_buf=file_name, orient="records",compression='gzip', lines=True)
我看到了(其他记录):
"lastDeliveryDate":1543258826689
这是个问题。
当我将数据从CSV加载到Google BigQuery时,eveything很好。日期已正确解析。
但是当我将加载更改为Json时。它不能正确解析日期。
我看到以下格式的日期:
50866-01-09 23:46:40 UTC
之所以会这样,是因为to_json()
和to_csv()
对iso_format
中的日期产生了不同的结果
我该如何解决?我是否必须编辑数据框并将所有日期列转换为常规UTC?我怎样才能做到这一点?以及为什么to_json()
不需要for to_csv()
?
如How do I translate an ISO 8601 datetime string into a Python datetime object?所述:
df["lastDeliveryDate"] = dateutil.parser.parse(df["lastDeliveryDate"])
但是它给出了:
TypeError:解析器必须是字符串或字符流,而不是Series
答案 0 :(得分:2)
从Pandas documentation on to_json()
:
日期格式: {无,“时代”,“ iso”}
日期转换的类型。 “ epoch” =纪元毫秒,“ iso” = ISO8601。默认值取决于方向。对于orient='table'
,默认值为“ iso”。对于所有其他东方,默认值为“时代”。
因此,对于orient="records"
,您必须设置date_format="iso"
才能获得日期时间格式,以后可以理解:
df.to_json(path_or_buf=file_name, orient="records", date_format="iso",
compression='gzip', lines=True)
答案 1 :(得分:1)
基本上dateutil.parser.parse()
期望使用字符串作为参数,但是您传递了整个列。尝试使用lambda函数:
df["lastDeliveryDate"] = df["lastDeliveryDate"].apply( lambda row: dateutil.parser.parse(row))