我想读取包含日期的csv文件。该CSV看起来是这样的:熊猫从csv解析日期
h1,h2,h3,h4,h5
A,B,C,D,E,20150420
A,B,C,D,E,20150420
A,B,C,D,E,20150420
用于读取CSV我使用此代码:
df = pd.read_csv(filen,
index_col=None,
header=0,
parse_dates=[5],
date_parser=lambda t:parse(t))
分析函数如下:
def parse(t):
string_ = str(t)
try:
return datetime.date(int(string_[:4]), int(string_[4:6]), int(string_[6:]))
except:
return datetime.date(1900,1,1)
我奇怪现在的问题是,在解析函数t
看起来像这样:
ndarray: ['20150420' '20150420' '20150420']
正如你所看到的,t
是数据列的整个数组。我认为解析第一行时应该只有第一个值,解析第二行时只需要第一个值,等等。现在,parse
总是以except-block结尾,因为int(string_[:4])
包含一个括号,显然,不能转换为int。解析函数的构建目的是一次只解析一个日期(例如,20150420
)。
我在做什么错?
编辑:
没关系,我只是阅读有关date_parser参数大熊猫文档,它似乎按预期方式工作(当然;))。所以我需要适应我的代码。我上面的例子是复制&从其他地方粘贴,我期望它的工作,因此,我的问题..我会报告回来,当我做我的代码适应。
EDIT2:
我的解析函数现在看起来是这样的,我想,代码工作现在。如果我还是做错了,请让我知道:
def parse(t):
ret = []
for ts in t:
string_ = str(ts)
try:
tsdt = datetime.date(int(string_[:4]), int(string_[4:6]), int(string_[6:]))
except:
tsdt = datetime.date(1900,1,1)
ret.append(tsdt)
return ret