Pandas认不出我的Date Time栏

62lalag4  于 2022-09-21  发布在  其他
关注(0)|答案(1)|浏览(168)

我将其从Postgres表导出为制表符分隔的CSV,如下所示:

copy (select * from mytable) to 'labels.csv' csv DELIMITER E't' header

哪个是(文件头)

user_id  session_id   start_time           mode
  2       715      2016-04-01 01:07:49+01   car
  2       716      2016-04-01 03:09:53+01   car
  2      1082      2016-04-02 13:05:16+01   car
  2      1090      2016-04-02 15:16:32+01   car

我把这条信息读到Pandas身上,想删除时区信息,就这样:

df = pd.read_csv('labels.csv', sep='t',parse_dates=['start_time']) 
df['start_time'] = df['start_time'].dt.tz_localize(None)

但给出了错误:

AttributeError: Can only use .dt accessor with datetimelike values

df.head()提供:

user_id  session_id     start_time              mode
0    2         715  2016-04-01 01:07:49+01:00     car
1    2         716  2016-04-01 03:09:53+01:00     car
2    2        1082  2016-04-02 13:05:16+01:00     car
3    2        1090  2016-04-02 15:16:32+01:00     car
4    2        1601  2016-04-04 13:56:13+01:00     foot

然而,

df.info()
 #   Column               Non-Null Count  Dtype 
---  ------               --------------  ----- 
 0   user_id              5374 non-null   int64 
 1   session_id           5374 non-null   int64 
 2   start_time           5374 non-null   object
 3   transportation_mode  5374 non-null   object
dtypes: int64(3), object(2)
i1icjdpr

i1icjdpr1#

请参阅pd.read_csv的文档:

parse_datesbool or list of int or name or list of list或dict,默认为FALSE

..。

如果列或索引不能表示为日期时间数组,例如由于无法解析的值或时区的混合,则该列或索引将原封不动地作为对象数据类型返回。对于非标准日期时间解析,请在pd.read_csv之后使用pd.to_datetime。要分析具有多个时区的索引或列,请将date_parser指定为部分应用的pd.to_datetimeutc=True。有关详细信息,请参阅解析具有混合时区的CSV。

您的数据中可能有无法解析的日期。尝试在使用pandas.to_datetime读取后强制使用DATETIME,以导致错误的值,因为这将在默认情况下引发错误的值:

df["start_time"] = pd.to_datetime(df["start_time"])

一旦确定了问题,就可以在代码中处理该值了。类似于:


# explicitly handle known invalid values

df["start_time"] = df["start_time"].replace({"--": pd.NaT})
df["start_time"] = pd.to_datetime(df["start_time"])

相关问题