Skip to main content
 首页 » 人工智能

读Json文件生成pandas数据框

2022年07月19日139jyk

本文讲解如何加载json文件或字符串为pandas数据框。pandas把json数据分成几种典型类型,希望对你实际数据应用开发有所启示。

有时可能需要转换json文件位pandas数据框。使用pandas内置的read_json()函数很容易实现,其语法如下:

read_json(‘path’, orient=’index’)

  • path: json文件的路径
  • orient: json文件的格式描述,缺省是index,还有其他选型:split, records, columns, values

下面通过几个示例进行说明。

records格式

假设json文件my_file.json的格式如下:

[ 
   { 
      "points": 25, 
      "assists": 5 
   }, 
   { 
      "points": 12, 
      "assists": 7 
   }, 
   { 
      "points": 15, 
      "assists": 7 
   }, 
   { 
      "points": 19, 
      "assists": 12 
   } 
]  

我们使用pandas的函数read_json,只要只从orient参数位records:

# 加载json文件,生成pandas数据框 
df = pd.read_json('data/json_file.json', orient='records') 
 
# 查看数据框 
print(df) 
 

输出结果:

   points  assists 
0      25        5 
1      12        7 
2      15        7 
3      19       12 

index格式

假设json文件格式为:

{ 
   "0": { 
      "points": 25, 
      "assists": 5 
   }, 
   "1": { 
      "points": 12, 
      "assists": 7 
   }, 
   "2": { 
      "points": 15, 
      "assists": 7 
   }, 
   "3": { 
      "points": 19, 
      "assists": 12 
   } 
}  

与上面实现代码一样,仅需要修改orient=‘index’:

import pandas as pd 
 
df = pd.read_json("data/my_file.json", orient='index') 
print(df) 

输出结果:

   points  assists 
0      25        5 
1      12        7 
2      15        7 
3      19       12 

columns 类型

假设json文件格式为:

{ 
   "points": { 
      "0": 25, 
      "1": 12, 
      "2": 15, 
      "3": 19 
   }, 
   "assists": { 
      "0": 5, 
      "1": 7, 
      "2": 7, 
      "3": 12 
   } 
}  

加载代码修改orient参数为’columns’:

import pandas as pd 
 
df = pd.read_json("data/my_file.json", orient='columns') 
 
print(df) 

结果与上面一致。

values格式

假设json文件代码如下:

[ 
   [ 
      25, 
      5 
   ], 
   [ 
      12, 
      7 
   ], 
   [ 
      15, 
      7 
   ], 
   [ 
      19, 
      12 
   ] 
]  

加载代码如下:

import pandas as pd 
 
df = pd.read_json("data/my_file.json", orient='values') 
 
print(df) 

输出结果:

    0   1 
0  25   5 
1  12   7 
2  15   7 
3  19  12 
 

split 参数示例

下面看split参数示例:

import pandas as pd 
 
# 示例数据 
data =  '{"columns":["col 1","col 2"], "index":["row 1","row 2"], "data":[["a","b"],["c","d"]]}' 
df = pd.read_json(data, orient='split') 
 
print(df) 

输出交叉表形式结果:

      col 1 col 2 
row 1     a     b 
row 2     c     d 

如果不指定index,则行自动生成序号:

import pandas as pd 
 
data =  '{"columns":["col 1","col 2"],  "data":[["a","b"],["c","d"]]}' 
df = pd.read_json(data, orient='split') 
 
print(df) 

输出结果:

  col 1 col 2 
0     a     b 
1     c     d 

压缩与编码

使用compression参数可以解压并载入json文件,参数选型有:‘zip’, ‘gzip’, ‘bz2’, ‘zstd’。如果指定zip,则确保文件为zip文件格式,None表示不解压。

使用 encoding 指定自定义编码,缺省为 UTF-8 编码。

假设my_file.zip压缩文件格式为:

[ 
   [ 
      25, 
      5 
   ], 
   [ 
      12, 
      7 
   ], 
   [ 
      15, 
      7 
   ], 
   [ 
      19, 
      12 
   ] 
] 

载入代码:

import pandas as pd 
 
df = pd.read_json("data/my_file.zip", orient='values', compression='zip') 
 
print(df) 

本文参考链接:https://blog.csdn.net/neweastsun/article/details/125125565