Python ValueError:未转换的数据仍然存在:00
我正在使用Python ValueError:未转换的数据仍然存在:00,python,pandas,datetime,Python,Pandas,Datetime,我正在使用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/j
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行,在convert_listlike_datetimes中
值,tz=conversion.datetime_to_datetime64(arg)文件“pandas/_libs/tslibs/conversion.pyx”,第200行,在
pandas._libs.tslibs.conversion.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”,
第208行,在包装器中
return func(*args,**kwargs)文件“/Users/pranavmarla/jama/lib/python3.6/site packages/pandas/core/tools/datetimes.py”,
第778行,in 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中
raise文件“/Users/pranavmarla/jama/lib/python3.6/site packages/pandas/core/tools/datetimes.py”,
第416行,在convert_listlike_datetimes中
arg,format,exact=exact,errors=errors文件“pandas/_libs/tslibs/strtime.pyx”,第148行,in
pandas._libs.tslibs.strtime.array_strtime value错误:未转换
数据显示: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
编辑-解决!“我的日期”列有两种类型的日期
2000年1月21日
及
02/02/00
我使用pd.to_datetime()方法的errors属性创建了两个独立的列,然后将它们合并为所需的列
pd.to_datetime(main,format = '%d/%m/%y', errors = 'coerce')
及
一个更优雅的解决方案将是受欢迎的尝试将infer_datetime_格式传递为true,可能是在数据中,日期不是传递的格式
pd.to_datetime(df['Date'], infer_datetime_format=True)
或传递错误='ignore'
pd.to_datetime(df['Date'], format = '%d/%m/%y',errors='ignore')
下面是一个很好的方法来查看函数失败的地方:
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,)
您能否从
correctedstats.csv
发布样本数据?问题可能就在这里。我已经添加了它,请检查它。我尝试了这两种格式,推断格式只会给我错误的输出(月为天、天和月),忽略它会忽略所有行。如果可能,你可以共享示例数据吗。我已将其添加到帖子中,请检查它,因为我正在读取“%d/%m/%y”,并且我的所有字符串在该上下文中都有效,这将如何适用?它将向您显示函数在哪个索引处失败,即在我的示例中,它在索引2处失败,然后检查索引处的格式/类型以进一步调查失败
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,)