【发布时间】:2020-04-25 18:37:17
【问题描述】:
我正在使用pd.to_datetime() 方法将一列字符串转换为日期时间对象。
import pandas as pd import numpy as np
main = pd.read_csv('correctedstats.csv', nrows = 50) main['Date'] =
pd.to_datetime(main['Date'], format = '%d/%m/%y')
这给了我以下错误-
Traceback(最近一次调用最后一次):文件 “/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/core/tools/datetimes.py”, 第 448 行,在 _convert_listlike_datetimes 值,tz = conversion.datetime_to_datetime64(arg) 文件“pandas/_libs/tslibs/conversion.pyx”,第 200 行,在 pandas._libs.tslibs.conversion.datetime_to_datetime64 类型错误: 无法识别的值类型:
在处理上述异常的过程中,又发生了一个异常:
Traceback(最近一次调用最后一次):文件“mergeDates.py”,第 8 行,在 main['Date'] = pd.to_datetime(main['Date'].astype(str), format = '%d/%m/%y') 文件 “/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/util/_decorators.py”, 第 208 行,在包装器中 返回 func(*args, **kwargs) 文件“/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/core/tools/datetimes.py”, 第 778 行,在 to_datetime values = convert_listlike(arg._values, True, format) 文件 "/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/core/tools/datetimes.py", 第 451 行,在 _convert_listlike_datetimes 提出电子文件“/Users/pranavmarla/jama/lib/python3.6/site-packages/pandas/core/tools/datetimes.py”, 第 416 行,在 _convert_listlike_datetimes arg,格式,exact=exact,errors=errors 文件“pandas/_libs/tslibs/strptime.pyx”,第 148 行,在 pandas._libs.tslibs.strptime.array_strptime ValueError:未转换 数据剩余:00
日期格式为“03/01/00”
如果我们通过以下方式将日期文本放入函数中,代码运行良好
pd.to_datetime('03/01/00', format = '%d/%m/%y')
我在这里做错了什么?
编辑 - companystats.csv -
0 1.0 34.0 Asian Paints 15.90 INE021A01026 03/01/00
1 2.0 34.0 Asian Paints 16.06 INE021A01026 04/01/00
2 3.0 34.0 Asian Paints 15.96 INE021A01026 05/01/00
3 4.0 34.0 Asian Paints 15.73 INE021A01026 06/01/00
4 5.0 34.0 Asian Paints 16.07 INE021A01026 07/01/00
5 6.0 34.0 Asian Paints 17.29 INE021A01026 10/01/00
6 7.0 34.0 Asian Paints 17.30 INE021A01026 11/01/00
7 8.0 34.0 Asian Paints 17.40 INE021A01026 12/01/00
8 9.0 34.0 Asian Paints 17.45 INE021A01026 13/01/2000
9 10.0 34.0 Asian Paints 17.08 INE021A01026 14/01/2000
10 11.0 34.0 Asian Paints 17.14 INE021A01026 17/01/2000
11 12.0 34.0 Asian Paints 17.25 INE021A01026 18/01/2000
12 13.0 34.0 Asian Paints 17.47 INE021A01026 19/01/2000
13 14.0 34.0 Asian Paints 17.52 INE021A01026 20/01/2000
14 15.0 34.0 Asian Paints 17.74 INE021A01026 21/01/2000
15 16.0 34.0 Asian Paints 19.10 INE021A01026 24/01/2000
16 17.0 34.0 Asian Paints 20.61 INE021A01026 25/01/2000
17 18.0 34.0 Asian Paints 19.71 INE021A01026 27/01/2000
18 19.0 34.0 Asian Paints 20.03 INE021A01026 28/01/2000
19 20.0 34.0 Asian Paints 19.19 INE021A01026 31/01/2000
20 21.0 34.0 Asian Paints 19.18 INE021A01026 01/02/00
21 22.0 34.0 Asian Paints 19.17 INE021A01026 02/02/00
22 23.0 34.0 Asian Paints 19.00 INE021A01026 03/02/00
23 24.0 34.0 Asian Paints 19.03 INE021A01026 04/02/00
编辑 - 已解决!我的日期列有两种类型的日期;
21/01/2000
和
02/02/00
我使用 pd.to_datetime() 方法的 errors 属性创建了两个单独的列,然后我将它们合并为我想要的列
pd.to_datetime(main,format = '%d/%m/%y', errors = 'coerce')
和
pd.to_datetime(main,format = '%d/%m/%Y', errors = 'coerce')
欢迎提供更优雅的解决方案
【问题讨论】:
-
您可以发布来自
correctedstats.csv的示例数据吗?问题可能在那里 -
我已经添加了,请查看