【发布时间】:2017-03-06 00:11:48
【问题描述】:
我正在尝试加载格式如下的 csv 文件:
40010 40015 40020 40025 40030 40035 40040 40045
2008-11-03 00:00 786 212 779 227 220 131 680 1006
2008-11-03 00:03 760 200 765 234 225 133 694 1063
2008-11-03 00:06 757 205 769 237 230 136 726 1051
2008-11-03 00:09 781 207 765 240 235 137 711 1040
2008-11-03 00:12 759 203 751 232 225 134 717 1088
...
文件以逗号分隔。这里没有固定宽度。
我希望行索引是日期时间,所以这是我在加载文件时正在做的事情:
def dateparse (timestamp):
return datetime.datetime.strptime(timestamp, '%Y-%m-%d %I:%M')
global_data_train = pd.read_csv('RTAHistorical.csv', sep=",",parse_dates=True, date_parser=dateparse, header=0, index_col=0, skip_blank_lines = True, engine='python')
但我收到以下错误:
TypeError: strptime() argument 1 must be str, not numpy.ndarray
正如我看到some people 成功使用相同的方法,我不太明白这个错误。
我做错了什么?
【问题讨论】:
-
尝试
global_data_train = pd.read_csv('RTAHistorical.csv', sep=",",parse_dates=[0], header=0, index_col=0, skip_blank_lines = True, engine='python')同样默认header被默认为0行,你可能不需要engine='python',因为它会尝试c-engine并回退到python在您尝试一些花哨的分隔符的情况下,同样您不需要在此处指定separatorarg,因为它默认为逗号。另外,您发布的原始数据是什么样的?如果是这样,它看起来像一个固定宽度的文件 -
那行得通。
read_csv的文档说:boolean:如果为真 -> 尝试解析索引。 整数或名称列表 -> 尝试将第 1、2、3 列分别解析为单独的日期列。那么doingparse_dates=[0]和parse_dates=True有什么区别呢? -
我认为当您尝试指定 dateparser func 并告诉它 parse_dates=True 并指定 index_col 时存在错误,如果您的格式可以由内置 dateparser 处理,那么您可以只需指定索引 col 索引
date_parse=[0]和index_col=[0]args 它就可以工作,无需过度复杂化
标签: python csv datetime pandas