ValueError:未转换的数据仍然存在:00
Posted
技术标签:
【中文标题】ValueError:未转换的数据仍然存在:00【英文标题】:ValueError: unconverted data remains: 00 【发布时间】: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
的示例数据吗?问题可能在那里
我已经添加了,请查看
【参考方案1】:
这是查看函数失败位置的好方法:
df = pd.DataFrame('date': ['03/01/00','13/01/2000','00/01/00'])
def date_format(f):
try:
return pd.to_datetime(f)
except Exception as e:
return e.args
print(df['date'].apply(date_format))
0 2000-03-01 00:00:00
1 2000-01-13 00:00:00
2 (month must be in 1..12,)
【讨论】:
由于我正在阅读 '%d/%m/%y' 并且我的所有字符串在该上下文中都是有效的,这将如何适用? 它将显示函数在哪个索引处失败,即在我的示例中,它在索引 2 处失败,然后检查索引处的格式/类型以进一步调查失败【参考方案2】:尝试将 infer_datetime_format 作为 true 传递,可能是在您的数据中,日期不是您传递的格式
pd.to_datetime(df['Date'], infer_datetime_format=True)
OR 传递错误 = '忽略'
pd.to_datetime(df['Date'], format = '%d/%m/%y',errors='ignore')
【讨论】:
两个都试过了,推断格式只是给了我错误的输出(月份为天、天和月)并且忽略它会忽略所有行。 如果可以的话,可以分享一下示例数据吗? 已添加到帖子中,请查看以上是关于ValueError:未转换的数据仍然存在:00的主要内容,如果未能解决你的问题,请参考以下文章
ValueError: Expected 2D array, got 1D array 相反,在将 1D 数组转换为 2D 后坚持
PIL/Pillow - ValueError: py.__spec__ 未设置
如何修复'ValueError:shapes(1,3)和(1,1)未对齐:3(dim 1)!= 1(dim 0)'numpy中的错误