几天前我有一个类似的问题已经解决了,但是现在,我的一些文件有一个非常相似的文件,但是标题在名称之前有一个空格,或者一个“。” 最后,它只是不起作用。
所以,我有这个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 个字段始终采用这种格式,只是标题中的名称发生了变化。