pandas 从Dataframe到JSON的自定义转换

4nkexdtk  于 2023-04-28  发布在  其他
关注(0)|答案(2)|浏览(101)

我有一个来自API的dataframe,字符串版本看起来像这样:

0

2023-04-17 4.82

2023-04-18 4.82

2023-04-19 4.82

2023-04-20 4.82

2023-04-21 4.81

当我调用df.to_json(orient = 'records')时,它看起来像这样(一点也不好):

[{"0":4.82},{"0":4.82},{"0":4.82},{"0":4.82},{"0":4.81}]

我真正想要的是它看起来像这样:

[{Date:"2023-04-17", "Rate":4.82},{Date:"2023-04-18", "Rate":4.82},{Date:"2023-04-19", "Rate":4.82},{Date:"2023-04-20", "Rate":4.82},{Date:"2023-04-21", "Rate":4.81}]

可能有许多行的数据,所以我需要转换执行良好

6kkfgxo0

6kkfgxo01#

您可以通过首先将dataframe转换为字典列表,然后使用json模块将其转换为具有所需结构的JSON格式来实现所需的输出。
下面是一个应该工作的示例代码片段:

import json

# assuming your dataframe is named `df`
data = df.to_dict(orient='records')

# iterate over the records and format the date and rate values
formatted_data = []
for record in data:
    formatted_data.append({"Date": record["0"].split()[0], "Rate": float(record["0"].split()[1])})

# convert the formatted data to JSON
json_data = json.dumps(formatted_data)

# print the resulting JSON string
print(json_data)

这段代码首先使用to_dict方法将dataframe转换为字典列表,其中orient参数设置为'records'。然后它迭代列表中的每个记录,并通过创建一个带有“Date”和“Rate”键的新字典来格式化日期和速率值。最后,它使用json.dumps方法将格式化的数据转换为JSON字符串。
这种方法即使在处理大型 Dataframe 时也会表现良好,因为它避免了使用缓慢的循环,并利用内置的json模块实现高效的序列化。

ijxebb2r

ijxebb2r2#

在解析API响应时进行转换。这允许您利用pandas提供的任何矢量化。

import io
import pandas as pd
data = '''0

2023-04-17 4.82

2023-04-18 4.82

2023-04-19 4.82

2023-04-20 4.82

2023-04-21 4.81'''
df = pd.read_csv(
    io.StringIO(data),
    sep=' ',
    names=['Date', 'Rate'],
    dtype={'Date': str, 'Rate': float},
    skiprows=[0]
)
df.to_json(orient='records')
'[{"Date":"2023-04-17","Rate":4.82},{"Date":"2023-04-18","Rate":4.82},{"Date":"2023-04-19","Rate":4.82},{"Date":"2023-04-20","Rate":4.82},{"Date":"2023-04-21","Rate":4.81}]'

pd.read_csv()的参数解释:

  1. io.StringIO(data):来自API响应的数据,应该很明显
  2. sep=' ':电池之间的分隔线,应明显
  3. names=['Date', 'Rate']:列标题
  4. dtype={'Date': str, 'Rate': float}:将每列的值转换为的类型
  5. skiprows=[0]:省略哪些行,这将省略第一行,因为它只是一个0,我们不希望它出现在结果中
    默认情况下跳过空行。

相关问题