1

几天前我有一个类似的问题已经解决了,但是现在,我的一些文件有一个非常相似的文件,但是标题在名称之前有一个空格,或者一个“。” 最后,它只是不起作用。

所以,我有这个data1

 Year,Day,Hour,Min,Sec.,P1S1
 2003,  1, 0, 1,30.09, 0.295E+04
 2003,  1, 1, 0,11.84, 0.297E+04
 2003,  1, 2, 0, 8.26, 0.338E+04
 2003,  1, 3, 0, 4.69, 0.291E+04
 2003,  1, 4, 0, 1.11, 0.337E+04

我可以阅读它(注意“年”中的年之前需要一个空格,这是阅读文件所必需的!):

import pandas as pd

def parse(yr, doy, hr, min, sec):
    yr, doy, hr, min = [int(x) for x in [yr, doy, hr, min]]
    sec = float(sec)
    mu_sec = int((sec - int(sec)) * 1e6)
    sec = int(sec)
    dt = datetime(yr - 1, 12, 31)
    delta = timedelta(days=doy, hours=hr, minutes=min, seconds=sec, microseconds=mu_sec)

    return dt + delta

# notice the need of a space before Year in ' Year', that is needed to read the file!
pd.read_csv(data1, parse_dates=[[' Year','Day','Hour','Min','Sec.']], date_parser=parse, index_col=0)

现在,如果我尝试对data2进行相同操作(请注意,现在在 Min 之后有一个“。”,在 data1 中不存在):

 Year,Day,Hour,Min.,Sec.,P1S1
 2003,  1, 0, 0, 0.00, 0.261E+04
 2003,  1, 0, 5, 0.00, 0.281E+04
 2003,  1, 0,10, 0.00, 0.268E+04
 2003,  1, 0,15, 0.00, 0.305E+04

当我做:

pd.read_csv(data2, parse_dates=[[' Year','Day','Hour','Min','Sec.']], date_parser=parse, index_col=0)

我收到一个错误,因为 Python/Pandas 不期望那个 '.' 在'Min'之后,或者当我有一个在'Year'之前没有空格的文件时相同。或前 5 个标头字段名称中的任何其他细微差别。

所以,我的问题是,有什么方法可以让这更健壮吗?我知道前 5 个字段始终采用这种格式,只是标题中的名称发生了变化。

4

1 回答 1

0

如果您知道他们总是处于相同的位置,您可以说类似parse_dates=[[0,1,2,3,4]].

于 2012-09-13T19:23:13.100 回答