我正在尝试读取日期格式为(UK)13/01/1800的文件,但是某些日期是1667年以前的,不能用纳秒级时间戳表示(请参见http://pandas.pydata。 org / pandas-docs / stable / gotchas.html#gotchas-timestamp-limits)。我从该页面了解到我需要创建自己的PeriodIndex来覆盖所需的范围(请参阅http://pandas.pydata.org/pandas-docs/stable/timeseries.html#timeseries-oob),但我无法理解如何将csv阅读器中的字符串转换为此periodindex中的日期。
到目前为止,我有:
span = pd.period_range('1000-01-01', '2100-01-01', freq='D')
df_earliest= pd.read_csv("objects.csv", index_col=0, names=['Object Id', 'Earliest Date'], parse_dates=[1], infer_datetime_format=True, dayfirst=True)
如何将跨度应用于日期阅读器/转换器,以便可以在数据框中创建PeriodIndex / DateTimeIndex列?
您可以尝试通过以下方式进行操作:
fn = r'D:\temp\.data\36987699.csv'
def dt_parse(s):
d,m,y = s.split('/')
return pd.Period(year=int(y), month=int(m), day=int(d), freq='D')
df = pd.read_csv(fn, parse_dates=[0], date_parser=dt_parse)
输入文件:
Date,col1
13/01/1800,aaa
25/12/1001,bbb
01/03/1267,ccc
测试:
In [16]: df
Out[16]:
Date col1
0 1800-01-13 aaa
1 1001-12-25 bbb
2 1267-03-01 ccc
In [17]: df.dtypes
Out[17]:
Date object
col1 object
dtype: object
In [18]: df['Date'].dt.year
Out[18]:
0 1800
1 1001
2 1267
Name: Date, dtype: int64
PS,您可能想try ... catch
在dt_parse()
函数中添加块以捕获ValueError:
异常-结果int()
...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句