将数据帧输出到json数组

Joh*_*ohn 4 python json numpy dataframe pandas

我想知道是否有更有效的方法来执行以下操作.

# transforms datetime into timestamp in seconds
t = df.index.values.astype(np.int64) // 10**6

return jsonify(np.c_[t, df.open, df.high, df.low, df.close, df.volume].tolist())
Run Code Online (Sandbox Code Playgroud)

其中df是包含索引是日期的数据帧,以及至少(但不仅)以下属性:open,high,low,close,volume.然后我将新创建的数组输出为带有烧瓶的JSON jsonify.上面的代码可以工作,但对于我如何使其更好/更高效的任何想法,它看起来非常低效.

Max*_*axU 14

你可以使用to_json()方法:

In [88]: import pandas_datareader.data as web

In [89]: apl = web.get_data_yahoo('AAPL', '2016-07-05', '2016-07-07')

In [90]: apl
Out[90]:
                 Open       High        Low      Close    Volume  Adj Close
Date
2016-07-05  95.389999  95.400002  94.459999  94.989998  27705200  94.989998
2016-07-06  94.599998  95.660004  94.370003  95.529999  30949100  95.529999
2016-07-07  95.699997  96.500000  95.620003  95.940002  25139600  95.940002
Run Code Online (Sandbox Code Playgroud)

我会用json.dumps(..., indent=2)它来使它更好/可读:

In [91]: import json
Run Code Online (Sandbox Code Playgroud)

东方="索引"

In [98]: print(json.dumps(json.loads(apl.to_json(orient='index')), indent=2))
{
  "1467849600000": {
    "Close": 95.940002,
    "High": 96.5,
    "Open": 95.699997,
    "Adj Close": 95.940002,
    "Volume": 25139600,
    "Low": 95.620003
  },
  "1467676800000": {
    "Close": 94.989998,
    "High": 95.400002,
    "Open": 95.389999,
    "Adj Close": 94.989998,
    "Volume": 27705200,
    "Low": 94.459999
  },
  "1467763200000": {
    "Close": 95.529999,
    "High": 95.660004,
    "Open": 94.599998,
    "Adj Close": 95.529999,
    "Volume": 30949100,
    "Low": 94.370003
  }
}
Run Code Online (Sandbox Code Playgroud)

orient ='records'(重置索引以使列Date可见):

In [99]: print(json.dumps(json.loads(apl.reset_index().to_json(orient='records')), indent=2))
[
  {
    "Close": 94.989998,
    "High": 95.400002,
    "Open": 95.389999,
    "Adj Close": 94.989998,
    "Volume": 27705200,
    "Date": 1467676800000,
    "Low": 94.459999
  },
  {
    "Close": 95.529999,
    "High": 95.660004,
    "Open": 94.599998,
    "Adj Close": 95.529999,
    "Volume": 30949100,
    "Date": 1467763200000,
    "Low": 94.370003
  },
  {
    "Close": 95.940002,
    "High": 96.5,
    "Open": 95.699997,
    "Adj Close": 95.940002,
    "Volume": 25139600,
    "Date": 1467849600000,
    "Low": 95.620003
  }
]
Run Code Online (Sandbox Code Playgroud)

您可以使用以下to_json()参数:

date_format:{'epoch','iso'}

日期转换类型.epoch = epoch毫秒,iso` = ISO8601,默认为epoch.

date_unit:string,默认'ms'(毫秒)

要编码的时间单位,控制时间戳和ISO8601精度.其中一个's','ms','us','ns'分别为秒,毫秒,微秒和纳秒.

东方:字符串

JSON字符串的格式

  • split:dict如{index - > [index],columns - > [columns],data - > [values]}
  • 记录:列表如[{column - > value},...,{column - > value}]
  • index:dict如{index - > {column - > value}}
  • columns:像{column - > {index - > value}}这样的dict:只是values数组