2017-09-02 64 views
0

我想知道是否有一种简单的方法将json数据加载到带有DateTimeIndex的Pandas DataFrame中。使用DatetimeIndex将价格代码加载到熊猫数据框中

data={"date":1405699200,"high":0.0045388,"low":0.00403001,"open":0.00404545,"close":0.00435873,"volume":44.34555992,"quoteVolume":10311.88079097,"weightedAverage":0.00430043},..] 

第一列是时间戳。我想熊猫将其加载为DateTimeIndex。 这可能吗?我试过类似的东西:

df = pd.DataFrame(data, index=['date']) 

但没有成功。 谢谢。

+2

请记住,在熊猫几乎所有的东西都已经实现了,通常谷歌搜索比在Stack上询问更有效(也更快)。这就是说,你应该看看[read_json](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_json.html),特别是'convert_dates'参数 – gionni

回答

1

根据this github issue,似乎尚未实现为数据框架构造函数中的特定列指定数据类型;作为变通,你可以使用astype,并通过字典的参数列的数据类型转换后的数据帧已建成:

df = pd.DataFrame(data).astype({'date': '<M8[s]'}).set_index('date') 
df 

enter image description here

+0

它创建RangeIndex。 –

+0

您可以使用'set_index'将某些列设置为索引。 – Psidom

+1

你是对的这个作品:) –

1

这个解决方案如何?好像你data变量是一个列表,所以这是基于关闭的是:

df = pd.DataFrame(data, index=pd.to_datetime([i.get('date') for i in data], unit= 's')) 


         close  date  high  low  open \ 
2014-07-18 16:00:00 0.004359 1405699200 0.004539 0.00403 0.004045 

         quoteVolume volume weightedAverage 
2014-07-18 16:00:00 10311.880791 44.34556   0.0043 


DatetimeIndex(['2014-07-18 16:00:00'], dtype='datetime64[ns]', freq=None) 
+0

它的工作原理。如果没有for-loop没有更好的解决方案,这是很好的答案。 –

0

您可以将date列转换为datetime并将其设置为数据帧的指数:

df1 = df.assign(date=pd.Timestamp.fromtimestamp(df.date)).set_index('date') 

在这一点上,数据帧df1的索引是date列,并且是DateTimeIndex对象。

print(df1.index) 
# DatetimeIndex(['2014-07-18 12:00:00'], dtype='datetime64[ns]', name='date', freq=None) 
0

您可以将时间戳转换为datetime 。

import datetime as dt 
import pandas as pd 
data={"date":1405699200,"high":0.0045388,"low":0.00403001,"open":0.00404545} 
data['date'] = dt.datetime.fromtimestamp(data['date']).strftime('%Y-%m-%d %H:%M:%S') 
df = pd.DataFrame(data, index=['date']) 
0

我结束了:

df = pd.read_json(url, orient='records', convert_dates=True) 
df.index = df['date'] 

感谢。