我正在使用: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'不匹配
我感谢任何想法
答案 0 :(得分:2)
您提供的示例代码对我来说很好用。我正在使用与您和Python 3.7相同的Pandas版本:
我从您提供的输入文件中删除了多余的空格:
#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