• pandas--->CSV / JSON


    csv

    CSV(Comma-Separated Values,逗号分隔值,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。

    CSV 是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。Pandas 可以很方便的处理 CSV 文件,本文以 nba.csv 为例,你可以下载 nba.csv 或打开 nba.csv 查看。

    实例1

    1. import pandas as pd
    2. df = pd.read_csv('nba.csv')
    3. print(df)

    to_string()

    to_string() 用于返回 DataFrame 类型的数据,如果不使用该函数,则输出结果为数据的前面 5 行和末尾 5 行,中间部分以 ... 代替。

    1. import pandas as pd
    2. df = pd.read_csv('nba.csv')
    3. print(df.to_string())

    to_csv()  

    我们也可以使用 to_csv() 方法将 DataFrame 存储为 csv 文件:

    1. import pandas as pd
    2.    
    3. # 三个字段 name, site, age
    4. nme = ["Google", "Runoob", "Taobao", "Wiki"]
    5. st = ["www.google.com", "www.runoob.com", "www.taobao.com", "www.wikipedia.org"]
    6. ag = [90, 40, 80, 98]
    7.    
    8. # 字典
    9. dict = {'name': nme, 'site': st, 'age': ag}
    10.      
    11. df = pd.DataFrame(dict)
    12.  
    13. # 保存 dataframe
    14. df.to_csv('site.csv')

    数据处理

    head()

    head( n ) 方法用于读取前面的 n 行,如果不填参数 n ,默认返回 5 行。

    1. import pandas as pd
    2. df = pd.read_csv('nba.csv')
    3. print(df.head())

    tail()

    tail( n ) 方法用于读取尾部的 n 行,如果不填参数 n ,默认返回 5 行,空行各个字段的值返回 NaN

    1. import pandas as pd
    2. df = pd.read_csv('nba.csv')
    3. print(df.tail())

     info()

    info() 方法返回表格的一些基本信息:

    1. import pandas as pd
    2. df = pd.read_csv('nba.csv')
    3. print(df.info())

    输出结果为:

    json

    JSON(JavaScript Object Notation,JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML。

    JSON 比 XML 更小、更快,更易解析,更多 JSON 内容可以参考 JSON 教程

    Pandas 可以很方便的处理 JSON 数据,本文以 sites.json 为例,内容如下:

    实例

    1. [
    2. {
    3. "id": "A001",
    4. "name": "菜鸟教程",
    5. "url": "www.runoob.com",
    6. "likes": 61
    7. },
    8. {
    9. "id": "A002",
    10. "name": "Google",
    11. "url": "www.google.com",
    12. "likes": 124
    13. },
    14. {
    15. "id": "A003",
    16. "name": "淘宝",
    17. "url": "www.taobao.com",
    18. "likes": 45
    19. }
    20. ]
    1. import pandas as pd
    2. df = pd.read_json('sites.json')
    3.    
    4. print(df.to_string())

    to_string()

    1. import pandas as pd
    2. data =[
    3.     {
    4.       "id": "A001",
    5.       "name": "菜鸟教程",
    6.       "url": "www.runoob.com",
    7.       "likes": 61
    8.     },
    9.     {
    10.       "id": "A002",
    11.       "name": "Google",
    12.       "url": "www.google.com",
    13.       "likes": 124
    14.     },
    15.     {
    16.       "id": "A003",
    17.       "name": "淘宝",
    18.       "url": "www.taobao.com",
    19.       "likes": 45
    20.     }
    21. ]
    22. df = pd.DataFrame(data)
    23. print(df)

    以上实例输出结果为:

    JSON 对象与 Python 字典具有相同的格式,

    所以我们可以直接将 Python 字典转化为 DataFrame 数据:

    1. import pandas as pd
    2. # 字典格式的 JSON                                                                                              
    3. s = {
    4.     "col1":{"row1":1,"row2":2,"row3":3},
    5.     "col2":{"row1":"x","row2":"y","row3":"z"}
    6. }
    7. # 读取 JSON 转为 DataFrame                                                                                          
    8. df = pd.DataFrame(s)
    9. print(df)

    以上实例输出结果为:

    内嵌的 JSON 数据

    假设有一组内嵌的 JSON 数据文件 nested_list.json :

    1. {
    2.     "school_name": "ABC primary school",
    3.     "class": "Year 1",
    4.     "students": [
    5.     {
    6.         "id": "A001",
    7.         "name": "Tom",
    8.         "math": 60,
    9.         "physics": 66,
    10.         "chemistry": 61
    11.     },
    12.     {
    13.         "id": "A002",
    14.         "name": "James",
    15.         "math": 89,
    16.         "physics": 76,
    17.         "chemistry": 51
    18.     },
    19.     {
    20.         "id": "A003",
    21.         "name": "Jenny",
    22.         "math": 79,
    23.         "physics": 90,
    24.         "chemistry": 78
    25.     }]
    26. }

    实例

    1. import pandas as pd
    2. df = pd.read_json('nested_list.json')
    3. print(df)

    以上实例输出结果为:

    json_normalize()

    1. import pandas as pd
    2. import json
    3. # 使用 Python JSON 模块载入数据
    4. with open('nested_list.json','r') as f:
    5.     data = json.loads(f.read())
    6. # 展平数据
    7. df_nested_list = pd.json_normalize(data, record_path =['students'])
    8. print(df_nested_list)

    以上实例输出结果为

     json_normalize() 使用了参数 record_path

    data = json.loads(f.read()) 使用 Python JSON 模块载入数据。

    json_normalize() 使用了参数 record_path 并设置为 ['students'] 用于展开内嵌的 JSON 数据 students

    显示结果还没有包含 school_name 和 class 元素,如果需要展示出来可以使用 meta 参数来显示这些元数据:

    1. import pandas as pd
    2. import json
    3. # 使用 Python JSON 模块载入数据
    4. with open('nested_list.json','r') as f:
    5.     data = json.loads(f.read())
    6. # 展平数据
    7. df_nested_list = pd.json_normalize(
    8.     data,
    9.     record_path =['students'],
    10.     meta=['school_name', 'class']
    11. )
    12. print(df_nested_list)

    以上实例输出结果为:

     读取更复杂的 JSON 数据

    nested_mix.json 文件内容

    1. {
    2.     "school_name": "local primary school",
    3.     "class": "Year 1",
    4.     "info": {
    5.       "president": "John Kasich",
    6.       "address": "ABC road, London, UK",
    7.       "contacts": {
    8.         "email": "admin@e.com",
    9.         "tel": "123456789"
    10.       }
    11.     },
    12.     "students": [
    13.     {
    14.         "id": "A001",
    15.         "name": "Tom",
    16.         "math": 60,
    17.         "physics": 66,
    18.         "chemistry": 61
    19.     },
    20.     {
    21.         "id": "A002",
    22.         "name": "James",
    23.         "math": 89,
    24.         "physics": 76,
    25.         "chemistry": 51
    26.     },
    27.     {
    28.         "id": "A003",
    29.         "name": "Jenny",
    30.         "math": 79,
    31.         "physics": 90,
    32.         "chemistry": 78
    33.     }]
    34. }
    1. import pandas as pd
    2. import json
    3. # 使用 Python JSON 模块载入数据
    4. with open('nested_mix.json','r') as f:
    5.     data = json.loads(f.read())
    6.    
    7. df = pd.json_normalize(
    8.     data,
    9.     record_path =['students'],
    10.     meta=[
    11.         'class',
    12.         ['info', 'president'],
    13.         ['info', 'contacts', 'tel']
    14.     ]
    15. )
    16. print(df)

    读取内嵌数据中的一组数据

    以下是实例文件 nested_deep.json,我们只读取内嵌中的 math 字段:

    1. {
    2.     "school_name": "local primary school",
    3.     "class": "Year 1",
    4.     "students": [
    5.     {
    6.         "id": "A001",
    7.         "name": "Tom",
    8.         "grade": {
    9.             "math": 60,
    10.             "physics": 66,
    11.             "chemistry": 61
    12.         }
    13.  
    14.     },
    15.     {
    16.         "id": "A002",
    17.         "name": "James",
    18.         "grade": {
    19.             "math": 89,
    20.             "physics": 76,
    21.             "chemistry": 51
    22.         }
    23.        
    24.     },
    25.     {
    26.         "id": "A003",
    27.         "name": "Jenny",
    28.         "grade": {
    29.             "math": 79,
    30.             "physics": 90,
    31.             "chemistry": 78
    32.         }
    33.     }]
    34. }

    这里我们需要使用到 glom 模块来处理数据套嵌,glom 模块允许我们使用 . 来访问内嵌对象的属性。第一次使用我们需要安装 glom:

    pip3 install glom

    1. import pandas as pd
    2. from glom import glom
    3. df = pd.read_json('nested_deep.json')
    4. data = df['students'].apply(lambda row: glom(row, 'grade.math'))
    5. print(data)

  • 相关阅读:
    Shell脚本经典案例:文件的备份
    【EI会议】第三届信息控制、电气工程及轨道交通国际学术会议(ICEERT 2023)
    传输层协议之UDP
    Go整合Logrus实现日志打印
    博客园众包平台:嵌入式开发任务悬赏5万,招募开发者接单
    RNN笔记(刘二大人)
    LetCode 字符串匹配
    K8S V1.18.1 离线一键部署安装
    硬盘的简单介绍
    Spring中Bean的生命周期详解
  • 原文地址:https://blog.csdn.net/qq_52385631/article/details/133277195