最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pandas JSON的處理使用

 更新時間:2025年02月13日 09:28:14   作者:游王子og  
Pandas提供了強大的方法來處理JSON格式的數(shù)據(jù),本文就來介紹一下Pandas JSON的處理使用,具有一定的參考價值,感興趣的可以了解一下

JSON(JavaScript Object Notation,JavaScript 對象表示法),是存儲和交換文本信息的語法,類似 XML。JSON 比 XML 更小、更快,更易解析。Pandas 提供了強大的方法來處理 JSON 格式的數(shù)據(jù),支持從 JSON 文件或字符串中讀取數(shù)據(jù)并將其轉(zhuǎn)換為 DataFrame,以及將 DataFrame 轉(zhuǎn)換回 JSON 格式。

操作方法說明
從 JSON 文件/字符串讀取數(shù)據(jù)pd.read_json()從 JSON 數(shù)據(jù)中讀取并加載為 DataFrame
將 DataFrame 轉(zhuǎn)換為 JSONDataFrame.to_json()將 DataFrame 轉(zhuǎn)換為 JSON 格式的數(shù)據(jù),可以指定結(jié)構(gòu)化方式
支持 JSON 結(jié)構(gòu)化方式orient 參數(shù)支持多種結(jié)構(gòu)化方式,如 split、records、columns

Pandas 可以很方便的處理 JSON 數(shù)據(jù),本文以 sites.json 為例,內(nèi)容如下:

[
  {
    "id": "A001",
    "name": "bing",
    "url": "www.bing.com",
    "likes": 61
  },
  {
    "id": "A002",
    "name": "Google",
    "url": "www.google.com",
    "likes": 124
  },
  {
    "id": "A003",
    "name": "淘寶",
    "url": "www.taobao.com",
    "likes": 45
  }
]

1 從 JSON 文件/字符串加載數(shù)據(jù)

1.1 pd.read_json() - 讀取 JSON 數(shù)據(jù)

read_json() 用于從 JSON 格式的數(shù)據(jù)中讀取并加載為一個 DataFrame。它支持從 JSON 文件、JSON 字符串或 JSON 網(wǎng)址中加載數(shù)據(jù)。

df = pd.read_json(
    path_or_buffer,      # JSON 文件路徑、JSON 字符串或 URL
    orient=None,         # JSON 數(shù)據(jù)的結(jié)構(gòu)方式,默認是 'columns'
    dtype=None,          # 強制指定列的數(shù)據(jù)類型
    convert_axes=True,   # 是否轉(zhuǎn)換行列索引
    convert_dates=True,  # 是否將日期解析為日期類型
    keep_default_na=True # 是否保留默認的缺失值標記
)
參數(shù)說明默認值
path_or_bufferJSON 文件的路徑、JSON 字符串或 URL必需參數(shù)
orient定義 JSON 數(shù)據(jù)的格式方式。常見值有 split、records、indexcolumns、valuesNone(根據(jù)文件自動推斷)
dtype強制指定列的數(shù)據(jù)類型None
convert_axes是否將軸轉(zhuǎn)換為合適的數(shù)據(jù)類型True
convert_dates是否將日期解析為日期類型True
keep_default_na是否保留默認的缺失值標記(如 NaNTrue

常見的 orient 參數(shù)選項:

orient 值JSON 格式示例描述
split{"index":["a","b"],"columns":["A","B"],"data":[[1,2],[3,4]]}使用鍵 index、columns 和 data 結(jié)構(gòu)
records[{"A":1,"B":2},{"A":3,"B":4}]每個記錄是一個字典,表示一行數(shù)據(jù)
index{"a":{"A":1,"B":2},"b":{"A":3,"B":4}}使用索引為鍵,值為字典的方式
columns{"A":{"a":1,"b":3},"B":{"a":2,"b":4}}使用列名為鍵,值為字典的方式
values[[1,2],[3,4]]只返回數(shù)據(jù),不包括索引和列名

從 JSON 文件加載數(shù)據(jù),to_string() 用于返回 DataFrame 類型的數(shù)據(jù),我們也可以直接處理 JSON 字符串。

import pandas as pd

df = pd.read_json('sites.json')

print(df.to_string())

JSON 對象與 Python 字典具有相同的格式,所以我們可以直接將 Python 字典轉(zhuǎn)化為 DataFrame 數(shù)據(jù):

import pandas as pd

# 字典格式的 JSON
s = {
    "col1": {"row1": 1, "row2": 2, "row3": 3},
    "col2": {"row1": "x", "row2": "y", "row3": "z"}
}

# 讀取 JSON 轉(zhuǎn)為 DataFrame
df = pd.DataFrame(s)
print(df)

從 JSON 字符串加載數(shù)據(jù):

from io import StringIO

import pandas as pd

# JSON 字符串
json_data = '''
[
  {"Name": "Alice", "Age": 25, "City": "New York"},
  {"Name": "Bob", "Age": 30, "City": "Los Angeles"},
  {"Name": "Charlie", "Age": 35, "City": "Chicago"}
]
'''

# 從 JSON 字符串讀取數(shù)據(jù)
df = pd.read_json(StringIO(json_data))

print(df)

1.2 內(nèi)嵌的 JSON 數(shù)據(jù)

假設(shè)有一組內(nèi)嵌的 JSON 數(shù)據(jù)文件 nested_list.json :

{
    "school_name": "ABC primary school",
    "class": "Year 1",
    "students": [
    {
        "id": "A001",
        "name": "Tom",
        "math": 60,
        "physics": 66,
        "chemistry": 61
    },
    {
        "id": "A002",
        "name": "James",
        "math": 89,
        "physics": 76,
        "chemistry": 51
    },
    {
        "id": "A003",
        "name": "Jenny",
        "math": 79,
        "physics": 90,
        "chemistry": 78
    }]
}

使用以下代碼格式化完整內(nèi)容:

import pandas as pd

df = pd.read_json('nested_list.json')

print(df)

這時我們就需要使用到 json_normalize() 方法將內(nèi)嵌的數(shù)據(jù)完整的解析出來:

import pandas as pd
import json

# 使用 Python JSON 模塊載入數(shù)據(jù)
with open('nested_list.json', 'r') as f:
    data = json.loads(f.read())

# 展平數(shù)據(jù)
df_nested_list = pd.json_normalize(data, record_path=['students'])
print(df_nested_list)

data = json.loads(f.read()) 使用 Python JSON 模塊載入數(shù)據(jù)。json_normalize() 使用了參數(shù) record_path 并設(shè)置為 ['students'] 用于展開內(nèi)嵌的 JSON 數(shù)據(jù) students。顯示結(jié)果還沒有包含 school_name 和 class 元素,如果需要展示出來可以使用 meta 參數(shù)來顯示這些元數(shù)據(jù):

import pandas as pd
import json

# 使用 Python JSON 模塊載入數(shù)據(jù)
with open('nested_list.json', 'r') as f:
    data = json.loads(f.read())

# 展平數(shù)據(jù)
df_nested_list = pd.json_normalize(
    data,
    record_path=['students'],
    meta=['school_name', 'class']
)
print(df_nested_list)

接下來嘗試讀取更復(fù)雜的 JSON 數(shù)據(jù),該數(shù)據(jù)嵌套了列表和字典,數(shù)據(jù)文件 nested_mix.json 如下:

{
  "school_name": "local primary school",
  "class": "Year 1",
  "info": {
    "president": "John Kasich",
    "address": "ABC road, London, UK",
    "contacts": {
      "email": "admin@e.com",
      "tel": "123456789"
    }
  },
  "students": [
    {
      "id": "A001",
      "name": "Tom",
      "math": 60,
      "physics": 66,
      "chemistry": 61
    },
    {
      "id": "A002",
      "name": "James",
      "math": 89,
      "physics": 76,
      "chemistry": 51
    },
    {
      "id": "A003",
      "name": "Jenny",
      "math": 79,
      "physics": 90,
      "chemistry": 78
    }
  ]
}

nested_mix.json 文件轉(zhuǎn)換為 DataFrame:

import pandas as pd
import json

# 使用 Python JSON 模塊載入數(shù)據(jù)
with open('nested_mix.json', 'r') as f:
    data = json.loads(f.read())

df = pd.json_normalize(
    data,
    record_path=['students'],
    meta=[
        'class',
        ['info', 'president'],
        ['info', 'contacts', 'tel']
    ]
)

print(df)

1.3 讀取內(nèi)嵌數(shù)據(jù)中的一組數(shù)據(jù)

以下是實例文件 nested_deep.json,我們只讀取內(nèi)嵌中的 math 字段:

{
  "school_name": "local primary school",
  "class": "Year 1",
  "students": [
    {
      "id": "A001",
      "name": "Tom",
      "grade": {
        "math": 60,
        "physics": 66,
        "chemistry": 61
      }
    },
    {
      "id": "A002",
      "name": "James",
      "grade": {
        "math": 89,
        "physics": 76,
        "chemistry": 51
      }
    },
    {
      "id": "A003",
      "name": "Jenny",
      "grade": {
        "math": 79,
        "physics": 90,
        "chemistry": 78
      }
    }
  ]
}

這里我們需要使用到 glom 模塊來處理數(shù)據(jù)套嵌,glom 模塊允許我們使用 . 來訪問內(nèi)嵌對象的屬性。第一次使用我們需要安裝 glom:

pip3 install glom
import pandas as pd
from glom import glom

df = pd.read_json('nested_deep.json')

data = df['students'].apply(lambda row: glom(row, 'grade.math'))
print(data)

2 將 DataFrame 轉(zhuǎn)換為 JSON

2.1 DataFrame.to_json() - 將 DataFrame 轉(zhuǎn)換為 JSON 數(shù)據(jù)

to_json() 方法用于將 DataFrame 轉(zhuǎn)換為 JSON 格式的數(shù)據(jù),可以指定 JSON 的結(jié)構(gòu)化方式。語法格式:

df.to_json(
    path_or_buffer=None,    # 輸出的文件路徑或文件對象,如果是 None 則返回 JSON 字符串
    orient=None,            # JSON 格式方式,支持 'split', 'records', 'index', 'columns', 'values'
    date_format=None,       # 日期格式,支持 'epoch', 'iso'
    default_handler=None,   # 自定義非標準類型的處理函數(shù)
    lines=False,            # 是否將每行數(shù)據(jù)作為一行(適用于 'records' 或 'split')
    encoding='utf-8'        # 編碼格式
)
參數(shù)說明默認值
path_or_buffer輸出的文件路徑或文件對象,若為 None,則返回 JSON 字符串None
orient指定 JSON 格式結(jié)構(gòu),支持 split、recordsindex、columns、valuesNone(默認是 columns
date_format日期格式,支持 'epoch' 或 'iso' 格式None
default_handler自定義處理非標準類型(如 datetime 等)的處理函數(shù)None
lines是否將每行數(shù)據(jù)作為一行輸出(適用于 records 或 splitFalse
encoding輸出文件的編碼格式'utf-8'
import pandas as pd

# 創(chuàng)建 DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

# 將 DataFrame 轉(zhuǎn)換為 JSON 字符串
json_str = df.to_json()

print(json_str)

將 DataFrame 轉(zhuǎn)換為 JSON 文件(指定 orient='records'):

import pandas as pd

# 創(chuàng)建 DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

# 將 DataFrame 轉(zhuǎn)換為 JSON 文件,指定 orient='records'
df.to_json('data.json', orient='records', lines=True)

將 DataFrame 轉(zhuǎn)換為 JSON 并指定日期格式:

import pandas as pd

# 創(chuàng)建 DataFrame,包含日期數(shù)據(jù)
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Date': pd.to_datetime(['2021-01-01', '2022-02-01', '2023-03-01']),
    'Age': [25, 30, 35]
})

# 將 DataFrame 轉(zhuǎn)換為 JSON,并指定日期格式為 'iso'
json_str = df.to_json(date_format='iso')

print(json_str)

到此這篇關(guān)于Pandas JSON的處理使用的文章就介紹到這了,更多相關(guān)Pandas JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何修改numpy?array的數(shù)據(jù)類型

    如何修改numpy?array的數(shù)據(jù)類型

    這篇文章主要介紹了如何修改numpy?array的數(shù)據(jù)類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • PyCharm導(dǎo)入python項目并配置虛擬環(huán)境的教程詳解

    PyCharm導(dǎo)入python項目并配置虛擬環(huán)境的教程詳解

    這篇文章主要介紹了Pycharm導(dǎo)入python項目并配置虛擬環(huán)境的教程,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 使用Python?Socket實現(xiàn)搭建HTTP協(xié)議

    使用Python?Socket實現(xiàn)搭建HTTP協(xié)議

    網(wǎng)絡(luò)編程中,了解底層的通信機制是極其重要的,本文將帶領(lǐng)大家深入探索如何使用Python的socket庫來實現(xiàn)一個簡單的HTTP協(xié)議,感興趣的可以了解下
    2024-02-02
  • Python hashlib模塊加密過程解析

    Python hashlib模塊加密過程解析

    這篇文章主要介紹了Python hashlib模塊加密過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Python3爬蟲mitmproxy的安裝步驟

    Python3爬蟲mitmproxy的安裝步驟

    在本篇文章里小編給大家整理的是關(guān)于Python3爬蟲mitmproxy的安裝步驟,需要的朋友們可以學(xué)習(xí)下。
    2020-07-07
  • shelve  用來持久化任意的Python對象實例代碼

    shelve 用來持久化任意的Python對象實例代碼

    這篇文章主要介紹了shelve 用來持久化任意的Python對象實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 簡單介紹Python的第三方庫yaml

    簡單介紹Python的第三方庫yaml

    今天給大家?guī)淼氖顷P(guān)于Python的相關(guān)知識,文章圍繞著Python的第三方庫yaml展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python pickle模塊用法實例

    Python pickle模塊用法實例

    這篇文章主要介紹了Python pickle模塊用法實例,python的pickle模塊實現(xiàn)了基本的數(shù)據(jù)序列和反序列化,需要的朋友可以參考下
    2015-04-04
  • Python實現(xiàn)將n個點均勻地分布在球面上的方法

    Python實現(xiàn)將n個點均勻地分布在球面上的方法

    這篇文章主要介紹了Python實現(xiàn)將n個點均勻地分布在球面上的方法,涉及Python繪圖的技巧與相關(guān)數(shù)學(xué)函數(shù)的調(diào)用,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • Python實現(xiàn)日志實時監(jiān)測的示例詳解

    Python實現(xiàn)日志實時監(jiān)測的示例詳解

    觀察者模式:是一種行為型設(shè)計模式。主要關(guān)注的是對象的責(zé)任,允許你定義一種訂閱機制,可在對象事件發(fā)生時通知多個"觀察"該對象的其他對象。本文將利用觀察者模式實現(xiàn)日志實時監(jiān)測,需要的可以參考一下
    2022-04-04

最新評論

万年县| 西和县| 南华县| 柏乡县| 台江县| 临澧县| 额敏县| 伊宁市| 麻阳| 海宁市| 织金县| 石嘴山市| 兰考县| 萝北县| 黎平县| 石门县| 伊通| 九龙坡区| 泽库县| 绿春县| 沅陵县| 宁阳县| 翁源县| 长寿区| 巴青县| 福泉市| 东乡族自治县| 平原县| 怀化市| 密云县| 遵义市| 兴和县| 前郭尔| 大名县| 手机| 晋城| 鹤岗市| 宜昌市| 茶陵县| 松潘县| 万年县|