当前位置: 首页 > 知识库问答 >
问题:

ValueError:未转换的数据仍然存在:00

赫连瑾瑜
2023-03-14

我使用pd.to_datetime()方法将一列字符串转换为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')

这给了我以下的错误-

回溯(最近一次调用):文件“/Users/pranavmarla/jama/lib/python3.6/site packages/pandas/core/tools/datetimes.py”,第448行,在类似于列表的日期时间值中,tz=conversion。datetime_to_datetime64(arg)文件“pandas/_libs/tslibs/conversion.pyx”,第200行,pandas格式_图书馆。tslibs。转变datetime_to_datetime64类型错误:无法识别的值类型:

在处理上述异常期间,发生了另一个异常:

回溯(最近一次调用last):文件“mergeDates.py”,第8行,在main['Date']=pd中。to_datetime(main['Date'].astype(str),格式=“%d/%m/%y”)文件“/Users/pranavmarla/jama/lib/python3.6/site packages/pandas/util/_decorators.py”,包装返回函数(*args,**kwargs)文件“/Users/pranavmarla/jama/lib/python3.6/site packages/pandages/core/tools/datetimes.py”,第778行,to_datetime values=convert(arg._values,True,format)File“/Users/pranavmarla/jama/lib/python3.6/site packages/pandas/core/tools/datetimes.py”,第451行,在"convert"listlike"datetimes raise e File“/Users/pranavmarla/jama/lib/python3.6/site packages/pandates/core/tools/datetimes.py”中,第416行,在"convert"转换"列表状"datetimes arg“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')

我做错了什么?

编辑-公司测试。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的errors属性。to_datetime()方法创建两个独立的列,然后将它们合并为所需的列

pd.to_datetime(main,format = '%d/%m/%y', errors = 'coerce')

pd.to_datetime(main,format = '%d/%m/%Y', errors = 'coerce')

我们欢迎一个更优雅的解决方案

共有2个答案

窦夜洛
2023-03-14

尝试将推断日期时间格式传递为true,这可能是因为在数据中,日期不是传递的格式

pd.to_datetime(df['Date'], infer_datetime_format=True) 

或传递错误='ignore'

pd.to_datetime(df['Date'], format = '%d/%m/%y',errors='ignore')
艾弘义
2023-03-14

这里有一个很好的方法来查看函数失败的地方:

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,)
 类似资料:
  • 问题内容: 无论如何,有什么可以将价值转换为价值? 我尝试投射它,但是没有用。 问题答案: BigInteger用于保存任意精度的整数,而不是小数。您可以使用该类来容纳双人间。 通常,您不能将Java原语类型转换为另一个类。我知道的例外是扩展类,例如和包装器类,它们允许您将int值转换为Integer,依此类推。

  • 守护进程系统线程[Java2D Disposer](暂停(异常OutOfMemoryError))拥有:Win32Graphics环境(id=116)拥有:FontStrikeDisposer(id=117)D3DGraphicsDevice.getDeviceCaps(int)line: 108 D3DGraphicsDevice.createDevice(int)line: 87 Win32G

  • 我正在使用MySQL工作台(5.6.19)。它有几个连接,其中我要访问的表位于“Connection1”(连接名称)中。连接主机:122.0.0.0。我的数据库名是“sorder”。user=“root”,password=“password”,port=3306。 这是我的一段代码: 我的驱动程序连接失败。另外,我不确定我的路径Strin url应该是什么,因为mySQL workbench中有

  • 问题内容: 我想检查浏览器是否仍然存在,如果不存在,那么我想打开一个新的浏览器!网络驱动程序中是否有可用的api来检查浏览器是否仍然存在? 问题答案: 调用后,将driver的值设置为 但是,如果调用,它将驱动程序的值设置为 因此,如果您在调用 driver.quit() 之后检查浏览器窗口,则可以通过以下实现知道。

  • 设置: 具有一个片段的活动,该片段通过单击按钮进行实例化。在fragment的构造函数中,使用了Bundle。在Bundle和ArrayList中 问题:分离片段时,字符串(姓氏)会按预期销毁,但数组列表会持续存在。因此,在调用片段的新实例时,会出现前一个ArrayList条目。回调不是问题所在。该行为也会在没有回调的情况下出现。 我已经检查了变量(和)和在点片段构造函数(),片段在方法()和片段

  • 问题内容: 我注意到这个构造函数非常痛苦(即使在Stack Overflow上也是如此)。即使文档明确指出,人们仍会使用它: 此构造函数的结果可能无法预测 http://java.sun.com/javase/6/docs/api/java/math/BigDecimal.html#BigDecimal(double) 我什至看到JSR-13得到批准,并提出了以下建议: 可能不推荐使用的现有规范: