熊猫值错误:将“ read_csv”与“ date_parser”和“ comment”一起使用时,“时间数据'nan'与格式不匹配”

时间:2019-05-09 08:16:51

标签: python pandas comments date-parsing

我正在使用:Python 3.7.2和Pandas 0.24.2 我尝试读取以下数据(data.txt)。用空格分隔,第一列应解析为日期时间对象:

       #00:00:00               col0       col1
       2019-03-28_08:58:00     1064      31965
       2019-03-28_09:08:00     1084      32565
       !2019-03-28_09:18:00    1104      33165
       2019-03-28_09:28:00     1124      33765

其中熊猫的read_csv为:

import pandas as pd
import datetime 

def date_parser (s):
    return datetime.datetime.strptime(str(s),'%Y-%m-%d_%H:%M:%S')

df      = pd.read_csv(filepath_or_buffer='data.txt',
                      delim_whitespace = True,
                      index_col='#00:00:00',
                      parse_dates=True,
                      date_parser=date_parser,
                      comment='!',
                      )

所有以特殊字符(此处为!)开头的行均应跳过。可以是其他任何特征。但是在注释行中,我总是会收到错误:

  

ValueError:时间数据'nan'与格式'%Y-%m-%d_%H:%M:%S'不匹配

我感谢任何想法

2 个答案:

答案 0 :(得分:2)

您提供的示例代码对我来说很好用。我正在使用与您和Python 3.7相同的Pandas版本:

It's working...

我从您提供的输入文件中删除了多余的空格:

#00:00:00 col0 col1
2019-03-28_08:58:00 1064 31965
2019-03-28_09:08:00 1084 32565
!2019-03-28_09:18:00 1104 33165
2019-03-28_09:28:00 1124 33765

答案 1 :(得分:2)

尝试这种方法:

df.columns = ["date", "c1", "c2"]
df.head()

date    c1  c2
0   2019-03-28_08:58:00 1064    31965
1   2019-03-28_09:08:00 1084    32565
2   2019-03-28_09:18:00 1104    33165
3   2019-03-28_09:28:00 1124    33765

df.dtypes
date    object
c1       int64
c2       int64
dtype: object

df.date = pd.to_datetime(df.date, format='%Y-%m-%d_%H:%M:%S')

df.dtypes

date    datetime64[ns]
c1               int64
c2               int64
dtype: object

之后,您还可以执行以下操作以提取年,时或日,例如:df.date.dt.year df.date.dt.hour或df.date.dt.date