我正在读取两个不同的 CSV,每个 CSV 的列中都有日期值。在 read_csv 之后,我想使用 to_datetime 方法将数据转换为日期时间。每个 CSV 中的日期格式略有不同,尽管在 to_datetime 格式参数中注明并指定了差异,但一个转换正常,而另一个返回以下值错误。
ValueError: to assemble mappings requires at least that [year, month, day] be sp
ecified: [day,month,year] is missing
首先dte.head()
0 10/14/2016 10/17/2016 10/19/2016 8/9/2016 10/17/2016 7/20/2016
1 7/15/2016 7/18/2016 7/20/2016 6/7/2016 7/18/2016 4/19/2016
2 4/15/2016 4/14/2016 4/18/2016 3/15/2016 4/18/2016 1/14/2016
3 1/15/2016 1/19/2016 1/19/2016 10/19/2015 1/19/2016 10/13/2015
4 10/15/2015 10/14/2015 10/19/2015 7/23/2015 10/14/2015 7/15/2015
此数据框使用以下代码可以很好地转换:
dte = pd.to_datetime(dte, infer_datetime_format=True)
或
dte = pd.to_datetime(dte[x], format='%m/%d/%Y')
第二个dtd.head()
0 2004-01-02 2004-01-02 2004-01-09 2004-01-16 2004-01-23 2004-01-30
1 2004-01-05 2004-01-09 2004-01-16 2004-01-23 2004-01-30 2004-02-06
2 2004-01-06 2004-01-09 2004-01-16 2004-01-23 2004-01-30 2004-02-06
3 2004-01-07 2004-01-09 2004-01-16 2004-01-23 2004-01-30 2004-02-06
4 2004-01-08 2004-01-09 2004-01-16 2004-01-23 2004-01-30 2004-02-06
此 csv 不使用以下任一方式进行转换:
dtd = pd.to_datetime(dtd, infer_datetime_format=True)
或
dtd = pd.to_datetime(dtd, format='%Y-%m-%d')
它返回上面的值错误。然而,有趣的是,使用 parse_dates 和 infer_datetime_format 作为 read_csv 方法的参数效果很好。这里发生了什么?
最佳答案
你可以堆叠
/pd.to_datetime
/unstack
pd.to_datetime(dte.stack()).unstack()
解释
pd.to_datetime
适用于字符串、列表或 pd.Series
。 dte
是一个 pd.DataFrame
,这就是您遇到问题的原因。 dte.stack()
生成一个 pd.Series
,其中所有行都堆叠在一起。然而,在这种堆叠形式中,因为它是一个 pd.Series
,我可以获得一个矢量化的 pd.to_datetime
来处理它。随后的 unstack
只是反转初始的 stack
以获得 dte
关于python - to_datetime Value Error : at least that [year, month, day] 必须指定 Pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39992411/