to_json没有头和索引pandas

m3eecexj  于 11个月前  发布在  其他
关注(0)|答案(6)|浏览(102)

我有以下PandasDF

data
day                                           2021-09-30
value1                                        730716000
value2                                        974689000
value3                                        375689000
value4                                        369077000

字符串
我如何将这个DF转换为JSON,就像这样:

{
    "day": "2021-09-30",
    "value1": 702228000,
    "value2": 924465000,
    "value3": 309753000,
    "value4": 306252
}


我最好的尝试是:

df.columns = range(df.shape[1])   # Delete headers
print(df.to_json(orient='index', indent=2))


但我得到了这个输出:

{
  "day":{
    "0":"2021-09-30"
  },
  "value1":{
    "0":"730716000"
  },
  "value2":{
    "0":"974689000"
  },
  "value3":{
    "0":"375689000"
  },
  "value4":{
    "0":"369077000"
  }
}


额外的疑问:是否有可能只将列数据的值1、2、3和4解析为int?

6rqinv9w

6rqinv9w1#

第一种方法是在使用to_json之前先squeeze你的框架

>>> print(df.squeeze().to_json(indent=4))
{
    "day":"2021-09-30",
    "value1":"730716000",
    "value2":"974689000",
    "value3":"375689000",
    "value4":"369077000"
}

字符串

注意squeeze只在这里起作用,因为您有一个单列的DataFrame

对于奖金,使用不同的策略

import json

data = json.dumps({k: int(v) if v.isdigit() else v
                      for k, v in df.squeeze().to_dict().items()}, indent=2)
print(data)

# Output
{
  "day": "2021-09-30",
  "value1": 730716000,
  "value2": 974689000,
  "value3": 375689000,
  "value4": 369077000
}

s71maibg

s71maibg2#

似乎没有一个orient值可以产生您想要的结果。
使用to_dict()创建一个字典,然后将其修复为您想要的。

d = df.to_dict(orient = 'index')
for k, v in d.items():
    try:
        d[k] = int(v["0"])
    except ValueError:
        d[k] = v["0"]
print(json.dumps(d, indent=2))

字符串
try/except将在可能的情况下将值转换为整数。

q0qdq0h2

q0qdq0h23#

您可以选择列“data”并使用to_json和默认值(orient='index'):

out = df['data'].to_json(indent=2)
print(out)

字符串
输出量:

{
  "day":"2021-09-30",
  "value1":"730716000",
  "value2":"974689000",
  "value3":"375689000",
  "value4":"369077000"
}


对于额外的问题,你可以使用to_dict + dict理解:

out2 = {k: int(v) if k.startswith('value') else v for k,v in df['data'].to_dict().items()}


输出量:

{'day': '2021-09-30',
 'value1': 730716000,
 'value2': 974689000,
 'value3': 375689000,
 'value4': 369077000}

gywdnpxw

gywdnpxw4#

import pandas as pd
import json 

json.dumps(df.to_dict()["data"])

字符串
动态方式,没有幻数或静态字符串

json.dumps(df.to_dict()[next(iter(df.columns))])


//输出

{
"day": "2021-09-30",
"value1": 702228000,
"value2": 924465000,
"value3": 309753000,
"value4": 306252
}
``

kcugc4gi

kcugc4gi5#

您可以将to_dictorient = records一起使用:

import pandas as pd
import json

df = pd.DataFrame({'day':['2021-09-30'], 'value1':[730716000]})
json.dumps(df.to_dict(orient='records')[0])

字符串

7vux5j2d

7vux5j2d6#

上面的方法在Python 3.11.1 / Pandas 1.5.2中不适用。
一个不雅的解决方案:

temp = '{'
            for index, row in df.iterrows():
                temp = temp + '\"'  + row['Column_1'] + '\":' + str(row['Column_2']) + ','
            json_string = temp[0:-1] + '}'

字符串

相关问题