Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas to_datetime ValueError:未知字符串格式_Python_Pandas - Fatal编程技术网

Python Pandas to_datetime ValueError:未知字符串格式

Python Pandas to_datetime ValueError:未知字符串格式,python,pandas,Python,Pandas,我的(熊猫)数据框中有一列: data['Start Date'].head() type(data['Start Date']) Output: 1/7/13 1/7/13 1/7/13 16/7/13 16/7/13 <class 'pandas.core.series.Series'> 我在这里遗漏了什么?我认为问题在于数据-存在一个有问题的字符串。所以您可以尝试检查列开始日期中字符串的长度: import pandas as pd import io temp=u"""S

我的(熊猫)数据框中有一列:

data['Start Date'].head()
type(data['Start Date'])
Output:
1/7/13
1/7/13
1/7/13
16/7/13
16/7/13
<class 'pandas.core.series.Series'>

我在这里遗漏了什么?

我认为问题在于数据-存在一个有问题的字符串。所以您可以尝试检查列
开始日期中字符串的长度:

import pandas as pd
import io

temp=u"""Start Date
1/7/13
1/7/1
1/7/13 12 17
16/7/13
16/7/13"""

data = pd.read_csv(io.StringIO(temp), sep=";", parse_dates=False)

#data['Start Date']= pd.to_datetime(data['Start Date'],dayfirst=True)
print data

     Start Date
0        1/7/13
1         1/7/1
2  1/7/13 12 17
3       16/7/13
4       16/7/13

#check, if length is more as 7
print data[data['Start Date'].str.len() > 7]

     Start Date
2  1/7/13 12 17
或者,您可以尝试以不同的方式查找这些有问题的行,例如,datetime的只读部分和检查解析datetime:

#read first 3 rows
data= data.iloc[:3]

data['Start Date']= pd.to_datetime(data['Start Date'],dayfirst=True)
但这只是提示

编辑:

感谢joris的建议,将参数
errors='improve'
添加到:


列中元素的确切数据类型是什么?您可以传递
errors='improve'
(或在早期版本中传递
improve=True
),然后查看哪一项转换为NaT(因此无法转换为日期时间)类型为object。我猜它被认为是字符串?这可能确实是字符串(但也可以是混合的)。你试过我的建议吗?数据来自CSV文件。当我查看Excel上的数据时,它看起来很好,就像常规的日期格式一样。日期的长度并不罕见。在深入研究每一条记录之后。我意识到有一些编码空白的问题,需要修改。事实证明,验证的“长度”方式帮助了这个案例。谢谢你修剪不寻常的空白。我想我的整个列都有一个额外的空格。@deadcode-使用
data['Start Date']=pd.to_datetime(data['Start Date'].str.strip(),dayfirst=True)
#read first 3 rows
data= data.iloc[:3]

data['Start Date']= pd.to_datetime(data['Start Date'],dayfirst=True)
temp=u"""Start Date
1/7/13
1/7/1
1/7/13 12 17
16/7/13
16/7/13 12 04"""

data = pd.read_csv(io.StringIO(temp), sep=";")
#add parameter errors coerce
data['Start Date']= pd.to_datetime(data['Start Date'], dayfirst=True, errors='coerce')
print data

  Start Date
0 2013-07-01
1 2001-07-01
2        NaT
3 2013-07-16
4        NaT

#index of data with null - NaT to variable idx
idx = data[data['Start Date'].isnull()].index
print idx

Int64Index([2, 4], dtype='int64')

#read csv again
data = pd.read_csv(io.StringIO(temp), sep=";")

#find problematic rows, where datetime is not parsed
print data.iloc[idx]

      Start Date
2   1/7/13 12 17
4  16/7/13 12 04