Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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 `to_datetime`和'parse_dates`都未能将数据类型转换为日期时间[ns]_Python_Pandas_Datetime - Fatal编程技术网

Python `to_datetime`和'parse_dates`都未能将数据类型转换为日期时间[ns]

Python `to_datetime`和'parse_dates`都未能将数据类型转换为日期时间[ns],python,pandas,datetime,Python,Pandas,Datetime,我正在加载一些数据,其中包含Date列。以下是复制的样本: Date Time Latitude Longitude 0 01/02/1965 13:44:18 19.246 145.616 1 01/04/1965 11:29:49 1.863 127.352 2 01/05/1965 18:05:58 -20.579 -173.972 3 01/08/1965 18:49:43

我正在加载一些数据,其中包含
Date
列。以下是复制的样本:


    Date        Time        Latitude    Longitude
0   01/02/1965  13:44:18    19.246      145.616
1   01/04/1965  11:29:49    1.863       127.352
2   01/05/1965  18:05:58    -20.579     -173.972
3   01/08/1965  18:49:43    -59.076.    -23.557
4   01/09/1965  13:32:50    11.938      126.427

使用with
parse_dates=['Date']
加载此数据会导致
Date
列的显示方式不同,但将类型保留为
Object

    Date                Time        Latitude    Longitude
0   1965-01-02 00:00:00 13:44:18    19.246      145.616
1   1965-01-04 00:00:00 11:29:49    1.863       127.352
2   1965-01-05 00:00:00 18:05:58    -20.579     -173.972
3   1965-01-08 00:00:00 18:49:43    -59.076     -23.557
4   1965-01-09 00:00:00 13:32:50    11.938      126.427
import pandas as pd

data = pd.read_csv('data/database.csv', parse_dates=['Date'])
data.Date = data.Date.apply(pd.to_datetime) 

data[data.Date.dt.year >= 1970]

AttributeError: Can only use .dt accessor with datetimelike value
df.info()

Data columns (total 21 columns):
 #   Column                      Non-Null Count  Dtype  
---  ------                      --------------  -----  
 0   Date                        23412 non-null  object 
如果在加载数据后使用
pd.to\u datetime()
,也会发生同样的情况

问题是我不能在类型为
对象的列/序列上使用
.dt
属性:

    Date                Time        Latitude    Longitude
0   1965-01-02 00:00:00 13:44:18    19.246      145.616
1   1965-01-04 00:00:00 11:29:49    1.863       127.352
2   1965-01-05 00:00:00 18:05:58    -20.579     -173.972
3   1965-01-08 00:00:00 18:49:43    -59.076     -23.557
4   1965-01-09 00:00:00 13:32:50    11.938      126.427
import pandas as pd

data = pd.read_csv('data/database.csv', parse_dates=['Date'])
data.Date = data.Date.apply(pd.to_datetime) 

data[data.Date.dt.year >= 1970]

AttributeError: Can only use .dt accessor with datetimelike value

如果
Date
列的类型正确,则此操作正常工作。任何线索都值得欣赏。

您可以将
to_datetime()
方法中的
错误
参数传递给
to_datetime()
方法,并将其设置为等于“强制”,因此基本上,如果您的任何日期值的格式不是日期或
to_datetime()
方法无法解析它们,则将这些值设置为
NaT
,并继续进一步解析:-

data['Date']=pd.to_datetime(data['Date'],errors='coerce')
现在通过以下方式检查列的数据类型:-

data.dtypes

It will gives you:-
Date         datetime64[ns]
Time                 object
Latitude             object
Longitude           float64
现在,当您看到日期列更改为“日期时间”时,您可以使用
dt

最后:-

data[data['Date'].dt.year >= 1970]

pd.to_datetime(df['Date'])
应该可以工作。还有一个
errors=
参数可以使用。你确定你所有的记录都是有效日期吗?@MattR不,我现在正在查看。我还注意到,访问
Date
列的单个索引会导致
timestamp
对象。我不知道这是不是一个线索。检查一下日期是否有不同的时区。如果是这种情况,请使用
utc=True
选项。@QuangHoang数据中没有时区,但设置
utc=True
确实解决了问题。谢谢,谢谢。我要试一试。你能详细解释一下这里发生了什么问题,需要额外使用
errors
参数吗?当然……更新了……请看一看,很好,谢谢。我发现2.3万行中有3行的格式是这样的
1975-02-23T02:58:41.000Z
,这肯定是在给工作带来麻烦。此外,@QuangHoang建议的
utc=True
也解决了这个错误。