我有一个包含日期的数据框,但格式化日期的方式是YYYYMMDD
,没有任何分隔符。
我尝试使用这样的一行:
df['date'] = [(x[:4] + '-' + x[4:6] + '-' + x[6]) for x in df['date']]
但我不断获得IndexError: invalid index to scalar variable.
从我发现的情况来看,这是因为我试图对数据帧中的系列进行操作。但是,我似乎无法找到另一种方法来在日期的各个部分之间添加任何类型的分隔符。
(由于缺少分隔符,使用time.striptime
只是给了我另一个错误)
是否有另一种方法可以将YYYYMMDD
转换为YYYY-MM-DD
以及转换为数据框中整个系列的日期时间对象?
编辑:
通过使用
将日期从numpy.float64
转换为string
来解决
df['date'] = [str(x) for x in df['date']]
df['date'] = df['date'].str.split('.').str[0]
然后使用顶部的操作,然后使用strptime
转换为日期时间对象。
答案 0 :(得分:1)
您可能会收到IndexError,因为date
列已dtype float64
:
In [138]: df = pd.DataFrame({'date': np.array([20000101, 20000102])})
In [139]: df['date'] = [(x[:4] + '-' + x[4:6] + '-' + x[6]) for x in df['date']]
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-139-f88e4248d599> in <module>()
----> 1 df['date'] = [(x[:4] + '-' + x[4:6] + '-' + x[6]) for x in df['date']]
IndexError: invalid index to scalar variable.
解决问题的一种方法是将浮点数转换为字符串,然后将字符串转换为pandas.Timestamps:
In [136]: df['date'].astype('|S8').map(pd.Timestamp)
Out[136]:
0 2000-01-01
1 2000-01-02
Name: date, dtype: datetime64[ns]
答案 1 :(得分:0)
试试这个代码段。
>>> from datetime import datetime
>>> datetime.strptime('20140101', '%Y%m%d')
datetime.datetime(2014, 1, 1, 0, 0)
>>> date = datetime.strptime('20140101', '%Y%m%d')
>>> date.strftime('%Y-%m-%d')
'2014-01-01'
>>>