在熊猫数据框中将 unix 时间转换为可读日期

我有一个包含 Unix 时间和价格的数据框。我想转换索引列,以便它显示在人类可读的日期。

例如,我在索引列中将 date显示为 1349633705,但是我希望它显示为 10/07/2012(或者至少是 10/07/2012 18:15)。

对于某些上下文,下面是我正在使用的代码和我已经尝试过的代码:

import json
import urllib2
from datetime import datetime
response = urllib2.urlopen('http://blockchain.info/charts/market-price?&format=json')
data = json.load(response)
df = DataFrame(data['values'])
df.columns = ["date","price"]
#convert dates
df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))
df.index = df.date

你也看到了 这里的 df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))不起作用,因为我使用的是整数,而不是字符串。我认为我需要使用 datetime.date.fromtimestamp,但我不太确定如何应用到整个 df.date

谢谢。

257345 次浏览

这似乎是新纪元以来的第二次。

In [20]: df = DataFrame(data['values'])


In [21]: df.columns = ["date","price"]


In [22]: df
Out[22]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 358 entries, 0 to 357
Data columns (total 2 columns):
date     358  non-null values
price    358  non-null values
dtypes: float64(1), int64(1)


In [23]: df.head()
Out[23]:
date  price
0  1349720105  12.08
1  1349806505  12.35
2  1349892905  12.15
3  1349979305  12.19
4  1350065705  12.15
In [25]: df['date'] = pd.to_datetime(df['date'],unit='s')


In [26]: df.head()
Out[26]:
date  price
0 2012-10-08 18:15:05  12.08
1 2012-10-09 18:15:05  12.35
2 2012-10-10 18:15:05  12.15
3 2012-10-11 18:15:05  12.19
4 2012-10-12 18:15:05  12.15


In [27]: df.dtypes
Out[27]:
date     datetime64[ns]
price           float64
dtype: object

如果你尝试使用:

df[DATE_FIELD]=(pd.to_datetime(df[DATE_FIELD],***unit='s'***))

并收到一个错误:

不能用单位‘ s’转换输入

这意味着没有以秒为单位指定 DATE_FIELD

对我来说,是毫秒 -EPOCH time

转换的工作原理如下:

df[DATE_FIELD]=(pd.to_datetime(df[DATE_FIELD],unit='ms'))

假设我们导入的 pandas as pddf是我们的数据帧

pd.to_datetime(df['date'], unit='s')

我没问题。

或者,通过更改上述代码的一行:

# df.date = df.date.apply(lambda d: datetime.strptime(d, "%Y-%m-%d"))
df.date = df.date.apply(lambda d: datetime.datetime.fromtimestamp(int(d)).strftime('%Y-%m-%d'))

它也应该工作。

熊猫文档给出了这个和其他格式的例子,并没有包含在以上任何一个答案中。链接: Https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html

密码

pd.to_datetime(1490195805, unit='s')

时间戳(’2017-03-2215:16:45’)

pd.to_datetime(1490195805433502912, unit='ns')

时间戳(’2017-03-2215:16:45.433502912’)