pandas 将DataFrame转换为对象数组

holgip5t  于 2023-02-14  发布在  其他
关注(0)|答案(3)|浏览(125)

有没有一种方法可以将Pandas DataFrame转换为对象数组(在JavaScript中使用起来更"舒适")?
我正在使用Facebook的先知运行一个时间序列预测,并返回数据回客户端做一些事情。
实际上,我想要这样一个DataFrame:

但是,返回类似于以下内容的内容:

[
    {
        'ds': <value>,
        'trend': <value>,
        'yhat_lower': <value>,
        'yhat_upper': <value>
        ...
    },
    {
        'ds': <value>,
        'trend': <value>,
        'yhat_lower': <value>,
        'yhat_upper': <value>
        ...
    },
    ...
]

我试过DataFrame.to_json(),它很接近我的需要,但它带来了其他问题。我也试过DataFrame.to_dict(),但它也不是我真正想要的。DataFrame.to_records()也是如此
我真的需要手动循环DataFrame来构建我想要的列表吗?或者在将DataFrame格式化为列名为对象键的对象数组时,我是否缺少了一些参数/方法?

    • 更新**

.to_dict()接近我想要的,但是仍然有一个嵌套的对象。有没有办法去掉它?

{'additive_terms': {0: 1821.6658106578184},
 'additive_terms_lower': {0: 1821.6658106578184},
 'additive_terms_upper': {0: 1821.6658106578184},
 'daily': {0: -904.5939055630084},
 'daily_lower': {0: -904.5939055630084},
 'daily_upper': {0: -904.5939055630084},
 'ds': {0: Timestamp('2016-01-01 00:00:00')},
 'multiplicative_terms': {0: 0.0},
 'multiplicative_terms_lower': {0: 0.0},
 'multiplicative_terms_upper': {0: 0.0},
 'trend': {0: 3959.7525337335633},
 'trend_lower': {0: 3959.7525337335633},
 'trend_upper': {0: 3959.7525337335633},
 'weekly': {0: 1382.1213748832024},
 'weekly_lower': {0: 1382.1213748832024},
 'weekly_upper': {0: 1382.1213748832024},
 'yearly': {0: 1344.1383413376243},
 'yearly_lower': {0: 1344.1383413376243},
 'yearly_upper': {0: 1344.1383413376243},
 'yhat': {0: 5781.418344391382},
 'yhat_lower': {0: -4262.772973874018},
 'yhat_upper': {0: 15333.709906373766}}
    • 更新2**

看起来@busybear的答案是我想要的,但是,我想要它作为一个对象数组,而不是一个使用索引作为单个记录键的大对象:

{0: {'additive_terms': 1821.6658106578184,
  'additive_terms_lower': 1821.6658106578184,
  'additive_terms_upper': 1821.6658106578184,
  'daily': -904.5939055630084,
  'daily_lower': -904.5939055630084,
  'daily_upper': -904.5939055630084,
  'ds': Timestamp('2016-01-01 00:00:00'),
  'multiplicative_terms': 0.0,
  'multiplicative_terms_lower': 0.0,
  'multiplicative_terms_upper': 0.0,
  'trend': 3959.7525337335633,
  'trend_lower': 3959.7525337335633,
  'trend_upper': 3959.7525337335633,
  'weekly': 1382.1213748832024,
  'weekly_lower': 1382.1213748832024,
  'weekly_upper': 1382.1213748832024,
  'yearly': 1344.1383413376243,
  'yearly_lower': 1344.1383413376243,
  'yearly_upper': 1344.1383413376243,
  'yhat': 5781.418344391382,
  'yhat_lower': -4262.772973874018,
  'yhat_upper': 15333.709906373766},
 1: {'additive_terms': 1609.1847938356425,
  'additive_terms_lower': 1609.1847938356425,
  'additive_terms_upper': 1609.1847938356425,
  'daily': -904.5939055630084,
  'daily_lower': -904.5939055630084,
  'daily_upper': -904.5939055630084,
  'ds': Timestamp('2016-01-02 00:00:00'),
  'multiplicative_terms': 0.0,
  'multiplicative_terms_lower': 0.0,
  'multiplicative_terms_upper': 0.0,
  'trend': 3954.608221609561,
  'trend_lower': 3954.608221609561,
  'trend_upper': 3954.608221609561,
  'weekly': 1056.9172554279028,
  'weekly_lower': 1056.9172554279028,
  'weekly_upper': 1056.9172554279028,
  'yearly': 1456.8614439707483,
  'yearly_lower': 1456.8614439707483,
  'yearly_upper': 1456.8614439707483,
  'yhat': 5563.793015445203,
  'yhat_lower': -4892.457856774376,
  'yhat_upper': 15305.24188601227}}
vwhgwdsa

vwhgwdsa1#

试试这个:

df.to_dict('records')

它给你一个没有索引的字典列表。

2ledvvac

2ledvvac2#

to_dict听起来就像你想要的。它为什么不适合你呢?你可以转置你的 Dataframe ,只取字典的值。这将符合你的期望:

data = df.T.to_dict()
list(data.values())
zzlelutf

zzlelutf3#

为此:
df.to_json(orient="records")
这应该会让你得到你所需要的。其他的方向是splitindextable
有关详细信息,请参阅:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_json.html

相关问题