Pandas将DF列转换为索引但不重复

2024-06-07 14:04:43 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个像这样的pandas数据帧,并且我想把“pol_class”列转换成索引,但只保留它,这样它就不会重复(pol_类有3个值:负数、中性、正),我该如何做才能最好?在

enter image description here

我正在尝试将其转换为一种格式,以便我可以将其称为pandas'.to-json(orient='index')格式,最终将其转换为json格式。。。(我将删除“time_by_min”列,而只使用其他两个非pol_class列)

[{ 
      "key" : "Negative" , 
      "values" : [ [ 1439489400000, 4] , [ 1439489460000, 8],
       [ 1439489520000, 5], 
       ...]
},
{
       "key" : "Neutral" ,
       "values" : [ [ 1439489400000, 0] , [ 1439489460000, 4],
       [ 1439489520000, 15],  
       ...]
},
{
       "key" : "Positive" ,
       "values" : [ [ 1439489400000, 6] , [ 1439489460000, 14],
       [ 1439489520000, 12],  
       ...]
}]

Tags: to数据keyjsonpandasindextime格式
1条回答
网友
1楼 · 发布于 2024-06-07 14:04:43

首先让我们从dict列表中复制数据帧。(下次您可以通过发布df.to_dict('split'))来帮助我们:

import json
import numpy as np
import pandas as pd

data = [
    { "key" : "Negative" , 
      "values" : [ [ 1439489400000, 4] , [ 1439489460000, 8],
                   [ 1439489520000, 5], ]},
    { "key" : "Neutral" ,
      "values" : [ [ 1439489400000, 0] , [ 1439489460000, 4],
                   [ 1439489520000, 15], ]},
    { "key" : "Positive" ,
      "values" : [ [ 1439489400000, 6] , [ 1439489460000, 14],
                   [ 1439489520000, 12], ]}]


df = pd.concat({ dct['key']:pd.DataFrame(dct['values']) for dct in data})
df.index = df.index.droplevel(level=1)
df.index.names = ['A']
df.columns=['B', 'C']
df = df.reset_index()
#           A              B   C
# 0  Negative  1439489400000   4
# 1  Negative  1439489460000   8
# 2  Negative  1439489520000   5
# 3   Neutral  1439489400000   0
# 4   Neutral  1439489460000   4
# 5   Neutral  1439489520000  15
# 6  Positive  1439489400000   6
# 7  Positive  1439489460000  14
# 8  Positive  1439489520000  12

现在我们可以从数据帧重新生成dict列表:

^{pr2}$

可以通过调用json.dumps获得所需的JSON:

print(json.dumps(newdata))

收益率

[{"values": [[1439489400000, 4], [1439489460000, 8], [1439489520000, 5]], "key": "Negative"}, {"values": [[1439489400000, 0], [1439489460000, 4], [1439489520000, 15]], "key": "Neutral"}, {"values": [[1439489400000, 6], [1439489460000, 14], [1439489520000, 12]], "key": "Positive"}]

只有一个方向使df.to_dict返回dict列表: df.to_dict(orient='records')。每个dict的键是列名。你的 所需的dict列表具有其键始终为'values'和的dict 'keys'。所以如果我们想使用df.to_dict,我们需要操纵 将数据帧转换为一个只包含两个列'keys''values'。。。呸,工作太多了。只是更容易表达你想要的 如上图所示,作为一个列表理解。在

相关问题 更多 >

    热门问题