pandas读写数据

03_Pandas 读写数据

学习目标

  • 能够使用Pandas读写文件中的数据

  • 知道Pandas读取数据时常用参数index_col、parse_dates、sheet_name、index的作用和用法

  • 知道Pandas和MySQL数据库进行读写交互的方法

  1. 读写文件

常用读写文件函数清单【查表】无需记忆
文件格式读取函数写入函数
xlsxdf = pd.read_exceldf.to_excel
xlspd.read_exceldf.to_excel
csvpd.read_csvdf.to_csv
tsvpd.read_csvdf.to_csv
jsonpd.read_jsondf.to_json
htmlpd.read_htmldf.to_html
sqlpd.read_sqldf.to_sql
  1. Excel文件

  1. 写_API
  • df.to_excel是pandas库中用于将DataFrame对象保存为 Excel 文件的方法。

  • 主要参数及用法:

    • excel_writer:指定要写入的 Excel 文件路径或ExcelWriter对象。例如:'output.xlsx'。

    • sheet_name:指定要写入的工作表名称。默认值为'Sheet1'。例如:sheet_name='MyData'。

    • index:布尔值,决定是否写入行索引。默认值为True,表示写入行索引。例如:index=False则不写入行索引。

    • columns:可选择要写入的列,可以是列名列表。默认值为写入所有列。例如:columns=['col1', 'col2']只写入指定的两列。

  • 示例用法:

     

    import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame(data) df.to_excel('output.xlsx', sheet_name='DataSheet', index=False)

    • 这段代码将创建一个包含两列数据的DataFrame,并将其保存为名为output.xlsx的 Excel 文件中的DataSheet工作表,且不写入行索引。

  1. 路径
 

准备数据(字典) data = [ [1, '张三', '1999-3-10', 18], [2, '李四', '2002-3-10', 15], [3, '王五', '1990-3-10', 33], [4, '隔壁老王', '1983-3-10', 40] ] df = pd.DataFrame(data, columns=['id', 'name', 'birthday', 'age']) df 写(默认) 写 (去掉索引) 写 (去掉索引, 去掉标题) 写 (去掉索引, 去掉标题, 指定sheet名称)

  1. 实现
  • 准备数据(字典)

     

    data = [ [1, '张三', '1999-3-10', 18], [2, '李四', '2002-3-10', 15], [3, '王五', '1990-3-10', 33], [4, '隔壁老王', '1983-3-10', 40] ] df = pd.DataFrame(data, columns=['id', 'name', 'birthday', 'age']) df

  • 写(默认)

     

    df.to_excel('./output/student.xls')

  • 写 (去掉索引)

     

    df.to_excel('./output/student_2.xls', index=False)

  • 写 (去掉索引, 去掉标题)

     

    df.to_excel('./output/student_3.xls', index=False, header=False)

  • 写 (去掉索引, 去掉标题, 指定sheet名称)

     

    df.to_excel('./output/student_4.xls', index=False, header=False, sheet_name='学生信息')

  1. 读_API
  • pd.read_excel是pandas库中用于读取 Excel 文件的函数。

  • 主要参数及用法:

    • io:指定要读取的 Excel 文件的路径,可以是本地文件路径或一个有效的文件对象。例如:'./data.xlsx'。

    • sheet_name:指定要读取的工作表名称或索引。可以是字符串(工作表名称)、整数(工作表索引)或一个列表(读取多个工作表)。默认值为 0,表示读取第一个工作表。例如:sheet_name='Sheet1'或sheet_name=1。

    • header:指定用作列名的行号。可以是整数、整数列表或None。如果是整数,该行为列名;如果是列表,多个行被组合成一个层次化索引;如果是None,则不使用任何行作为列名,列名将是从 0 开始的整数。默认值为 0,表示第一行为列名。例如:header=1表示将第二行作为列名。

    • index_col:指定用作行索引的列号或列名。可以是整数、整数列表或None。如果是整数,该列为行索引;如果是列表,多个列被组合成一个层次化索引;如果是None,则不使用任何列作为行索引,行索引将是从 0 开始的整数。默认值为None。例如:index_col=0表示将第一列作为行索引。

    • usecols:指定要读取的列。可以是列名列表、整数列表或一个可调用对象,用于筛选列。例如:usecols=[0, 2]表示读取第一列和第三列。

    • skiprows:指定要跳过的行数。可以是整数、整数列表或可调用对象。例如:skiprows=2表示跳过前两行。

    • nrows:指定要读取的行数。例如:nrows=100表示读取前 100 行数据。

  • 返回值:

    • 该函数返回一个pandas的DataFrame对象,包含从 Excel 文件中读取的数据。

  • 示例用法:

     

    import pandas as pd df = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0, index_col=0) print(df)

    • 这个示例代码读取名为data.xlsx文件中的Sheet1工作表,将第一行作为列名,第一列作为行索引,并打印出读取的数据框。

  1. 路径
 

# 1 读(默认) # 2 读 指定索引列 # 3 读 碰到无标题列 无索引列 怎么办? 指定索引列, 标题列 # 4 读 只要 1 2 3 列 # 5 读 只要前两行数据 # 6 读 跳过前两行

  1. 实现
  • 1 读(默认)

     

    df = pd.read_excel('./output/student.xls') df

  • 2 读 指定索引列

     

    pd.read_excel('./output/student.xls', index_col=0)

  • 3 读 碰到无标题列 无索引列 怎么办? 指定索引列, 标题列

     

    print(pd.read_excel('./output/student_3.xls', index_col=0)) print('------------------------') pd.read_excel('./output/student_3.xls', index_col=None, header=None)

  • 4 读 只要 1 2 3 列

     

    pd.read_excel('./output/student.xls', index_col=0, usecols=[1,2,3]) pd.read_excel('./output/student.xls', index_col=0, usecols=["id", "name", "birthday"])

  • 5 读 只要前两行数据

     

    pd.read_excel('./output/student.xls', index_col=0, usecols=[1,2,3], nrows=2)

  • 6 读 跳过前两行

     

    pd.read_excel('./output/student.xls', index_col=0, usecols=[1,2,3], skiprows=2)

  1. CSV文件

  • 在CSV文件中,对于每一行,各列采用逗号,分隔;使用\n换行符换行

  • 除了逗号,还可以使用其他类型的分隔符,比如TSV文件,使用制表符\t作为分隔符

  • CSV是数据协作和共享的首选格式,因为可以使用excel工具打开

  1. 写_API
  • df.to_csv是pandas库中用于将DataFrame对象保存为 CSV(逗号分隔值)文件的方法。

  • 主要参数及用法:

    • path_or_buf:指定要写入的 CSV 文件路径或文件对象。例如:'output.csv'。

    • sep:指定分隔符,默认为,。例如:sep=';'可以使用分号作为分隔符。

    • index:布尔值,决定是否写入行索引。默认值为True,表示写入行索引。例如:index=False则不写入行索引。

    • header:布尔值或字符串列表,决定是否写入列名。默认值为True,表示写入列名。如果设置为False,则不写入列名。也可以传入一个列名列表来指定特定的列名写入。例如:header=['Col1', 'Col2']。

    • encoding:指定文件编码方式。常见的编码有utf-8等。例如:encoding='utf-8-sig'。

    • mode:指定文件打开模式,默认为'w'(写入模式)。如果要追加数据,可以使用'a'。

  • 示例用法:

     

    import pandas as pd data = {'A': [1, 2, 3], 'B': [4, 5, 6]} df = pd.DataFrame(data) df.to_csv('output.csv', index=False, sep='|')

    • 这段代码将创建一个包含两列数据的DataFrame,并将其保存为名为output.csv的 CSV 文件,使用竖线|作为分隔符且不写入行索引。

  1. 路径
 

import pandas as pd # 1 将数据写入 csv 中 # 1.1 准备数据(字典) data = [ [1, '张三', '1999-3-10', 18], [2, '李四', '2002-3-10', 15], [3, '王五', '1990-3-10', 33], [4, '隔壁老王', '1983-3-10', 40] ] df = pd.DataFrame(data, columns=['id', 'name', 'birthday', 'age']) df # 1 写(默认) # 2 写 去掉索引 # 2 写 保留索引 # 3 写 去掉索引 去掉标题 # 4 写 去掉索引 去掉标题 只要 id列和 name列 # 5 写 去掉索引 去掉标题 更换分隔符 # 6 写 追加效果 默认是覆写

  1. 实现
 

import pandas as pd # 1 将数据写入 csv 中 # 1.1 准备数据(字典) data = [ [1, '张三', '1999-3-10', 18], [2, '李四', '2002-3-10', 15], [3, '王五', '1990-3-10', 33], [4, '隔壁老王', '1983-3-10', 40] ] df = pd.DataFrame(data, columns=['id', 'name', 'birthday', 'age']) df # 1 写(默认) df.to_csv('./output/student.csv') # 2 写 去掉索引 df.to_csv('./output/student_2.csv', index=False) # 2 写 保留索引 df.to_csv('./output/student_2_2.csv', index=True) # 3 写 去掉索引 去掉标题 df.to_csv('./output/student_3.csv', index=False, header=False) # 4 写 去掉索引 去掉标题 只要 id列和 name列 df.to_csv('./output/student_4.csv', index=False, header=False, columns=["id", "name"]) # 5 写 去掉索引 去掉标题 更换分隔符 df.to_csv('./output/student_5.csv', index=False, header=False, sep=';') # 6 写 追加效果 默认是覆写 df.to_csv('./output/student_5.csv', index=False, header=False, sep=';', mode='a')

  1. 写_API
  • pd.read_csv是pandas库中用于读取 CSV(逗号分隔值)文件的函数。

  • 主要参数及用法:

    • filepath_or_buffer:指定要读取的 CSV 文件的路径或文件对象。例如:'data.csv'。

    • sep:指定分隔符,默认为,。如果 CSV 文件使用其他分隔符,如制表符\t或分号;,可以通过这个参数指定。例如:sep=';'。

    • header:指定用作列名的行号。可以是整数、整数列表或None。如果是整数,该行为列名;如果是列表,多个行被组合成一个层次化索引;如果是None,则不使用任何行作为列名,列名将是从 0 开始的整数。默认值为 0,表示第一行为列名。例如:header=None表示不将任何行作为列名,列名将自动编号。

    • names:如果header=None,可以使用这个参数指定列名列表。例如:names=['col1', 'col2', 'col3']。

    • index_col:指定用作行索引的列号或列名。可以是整数、整数列表或None。如果是整数,该列为行索引;如果是列表,多个列被组合成一个层次化索引;如果是None,则不使用任何列作为行索引,行索引将是从 0 开始的整数。默认值为None。例如:index_col=0表示将第一列作为行索引。

    • usecols:指定要读取的列。可以是列名列表、整数列表或一个可调用对象,用于筛选列。例如:usecols=[0, 2]表示读取第一列和第三列。

    • skiprows:指定要跳过的行数。可以是整数、整数列表或可调用对象。例如:skiprows=2表示跳过前两行。

    • nrows:指定要读取的行数。例如:nrows=100表示读取前 100 行数据。

    • encoding:指定文件的编码方式。常见的编码有utf-8等。例如:encoding='utf-8-sig'。

  • 返回值:

    • 该函数返回一个pandas的DataFrame对象,包含从 CSV 文件中读取的数据。

  • 示例用法:

     

    import pandas as pd # 读取 CSV 文件,使用分号作为分隔符,第一行为列名,将第三列作为行索引 df = pd.read_csv('data.csv', sep=';', header=0, index_col=2) print(df)

    • 这个示例代码读取名为data.csv的文件,使用分号作为分隔符,将第一行作为列名,并将第三列作为行索引,然后打印出读取的数据框。

  1. 路径
 

# 1 读(无索引列的文件) # 2 读(有索引列的文件) # 3 读 指定索引列 # 4 读 指定索引列, 将 birthday 解析成 日期类型 # 5 读 指定索引列, 指定非默认分隔符

  1. 实现
 

# 1 读(无索引列的文件) df = pd.read_csv('./output/student.csv') df # 2 读(有索引列的文件) df = pd.read_csv('./output/student_2_2.csv') df # 3 读 指定索引列 df = pd.read_csv('./output/student_2_2.csv', index_col=0) print(df) print('---------------------------') print(df.info()) # 4 读 指定索引列, 将 birthday 解析成 日期类型 df = pd.read_csv('./output/student_2_2.csv', index_col=0, parse_dates=['birthday']) print(df) print('---------------------------') print(df.info()) # 5 读 指定索引列, 指定非默认分隔符 df = pd.read_csv('./output/student_5.csv', index_col=0, header=None, sep=';') df

  1. 读写数据库

准备工作

如果想利用pandas和MySQL数据库进行交互,需要先安装与数据库交互所需要的 pymysqlsqlalchemy python包
虚拟机的python解析器已经安装好这两个包,无需重复安装
pip install pymysql
pip install sqlalchemy
  1. Mysql 写

  1. 写 API

  • 创建数据库操作引擎对象并指定数据库

 

# 导入sqlalchemy的数据库引擎 from sqlalchemy import create_engine # 创建数据库引擎,传入url规则的字符串 engine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/test?charset=utf8') # mysql+pymysql://root:123456@192.168.88.100:3306/test?charset=utf8 # mysql 表示数据库类型 # pymysql 表示python操作数据库的包 # root:123456 表示数据库的账号和密码,用冒号连接 # 192.168.88.100:3306/test 表示数据库的ip和端口,以及名叫test的数据库 # charset=utf8 规定编码格式

  • 将数据写入MySQL数据库

 

# df.to_sql()方法将df数据快速写入数据库, 表不存在时会自动创建 df.to_sql(name='student', con=engine, index=False, if_exists='append') # name:数据表的名称 # con:数据库交互引擎对象 # index=False: 表示不将索引保存到数据表中 # if_exists: 数据写入方式, append->追加写入 replace->覆盖写入

  1. 路径

 

# 1 加载数据 import pandas as pd df = pd.read_csv('./output/student.csv', index_col=[0]) df # 创建连接 mysql+pymysql://username:password@host:port/database_name # 写

  1. 实现

 

# 1 加载数据 import pandas as pd df = pd.read_csv('./output/student.csv', index_col=[0]) df # 创建连接 mysql+pymysql://username:password@host:port/database_name from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://root:123456@192.168.88.100/test?charset=utf8') # 写 df.to_sql('student', con=engine, if_exists='append')

  1. Mysql 读

  1. 读 API

  • pd.read_sql是pandas库中用于从数据库中读取数据并转换为DataFrame对象的函数。

  • 主要参数及用法:

    • sql:要执行的 SQL 查询语句或表名。如果是表名,函数将尝试从数据库中读取整个表的数据。例如:'SELECT * FROM my_table'或者'my_table'。

    • con:数据库连接对象。这通常是使用sqlalchemy创建的连接引擎,与df.to_sql中的con参数类似。例如:如果是连接到 MySQL 数据库,可以使用create_engine('mysql+pymysql://username:password@host:port/database_name')创建连接引擎并传入这里。

    • index_col:指定用作DataFrame行索引的列名或列号。可以是单个列名 / 列号,也可以是一个列表,表示多个列组成的复合索引。例如:index_col='id'表示将数据库表中的id列作为DataFrame的行索引。

    • columns:指定要读取的列名列表。如果只想读取数据库表中的部分列,可以通过这个参数指定。例如:columns=['col1', 'col2']。

  • 返回值:

    • 该函数返回一个pandas的DataFrame对象,包含从数据库中读取的数据。

  • 示例用法:

     

    import pandas as pd from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://username:password@host:port/database_name') # 读取整个表数据并将表中的 id 列作为 DataFrame 的行索引 df = pd.read_sql('my_table', con=engine, index_col=['id']) print(df)

    • 假设我们有一个 MySQL 数据库,想要读取其中一个表的数据:

    • 在这个例子中,我们使用sqlalchemy创建了一个连接到 MySQL 数据库的引擎,并使用pd.read_sql读取了名为my_table的表数据,将表中的id列作为DataFrame的行索引,然后打印出读取的数据框。

  1. 路径

 

# 1 通过表读 # 2 通过 sql 读取

  1. 实现

  • 指定表名, 指定列名

 

# 1 通过表读 df = pd.read("student", con=engine, columns=["id", "name"]) print(df) # df = pd.read_table("student", con=engine, columns=["id", "name"]) # print(df)

  • 使用SQL语句获取数据

 

# 2 通过 sql 读取 df = pd.read("select * from student where id>2", con=engine) df # df = pd.read_sql("select * from student where id>2", con=engine) # df

总结

请对下面的内容 有印象、能找到、能理解、能看懂
  • 写文件方法df.to_csv/excel('xxx.csv/xls')

  • pd.read_csv/excel()读取文件,常用参数如下

    • index_col 指定索引列

      • index_col = [1] 列下标指定为索引

      • index_col = ['col_name'] 列名指定为索引

    • parse_dates 对指定列解析为时间日期类型

      • 将指定的列解析为时间日期类型

        • parse_dates=[1]通过列下标解析该列为时间日期类型

        • parse_dates=['col_name']通过列名解析该列为时间日期类型

      • parse_dates=True将df的索引解析为时间日期类型

    • pd.read_csv('xxx.tsv', sep='\t') 指定字符分隔符为\t读取tsv文件

  • Pandas和MySQL进行交互(读写)

 

# 需要安装 pip istall pymysql # 需要安装 pip istall sqlalchemy # 导入sqlalchemy的数据库引擎 from sqlalchemy import create_engine # 创建数据库引擎,传入url规则的字符串 engine = create_engine('mysql+pymysql://root:123456@192.168.88.100:3306/test?charset=utf8') # mysql+pymysql://root:123456@192.168.88.100:3306/test?charset=utf8 # mysql 表示数据库类型 # pymysql 表示python操作数据库的包 # root:123456 表示数据库的账号和密码,用冒号连接 # 192.168.88.100:3306/test 表示数据库的ip和端口,以及名叫test的数据库 # charset=utf8 规定编码格式 # df.to_sql()方法将df数据快速写入数据库, 表不存在时会自动创建 df.to_sql(name='student', con=engine, index=False, if_exists='append') # name:数据表的名称 # con:数据库交互引擎对象 # index=False: 表示不将索引保存到数据表中 # if_exists: 数据写入方式, append->追加写入 replace->覆盖写入 # sql:读取的表名 # con:数据库交互引擎对象 # columns:读取的列名 student = pd.read_sql(sql='student', con=engine, columns=['id', 'name']) print(student) # pd.read_sql_table('student', con=engine, columns=['id', 'name']) # sql:传入sql语句 # con:数据库交互引擎对象 student = pd.read_sql(sql='select * from student where age > 20', con=engine) print(student) # pd.read_sql_query(sql='select * from student where age > 20', con=engine)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值