python panads读取保存数据

学习目标

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

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

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

1 读写文件

常用读写文件函数清单【查表】无需记忆

文件格式读取函数写入函数
xlsxpd.read_exceldf.to_excel
xlspd.read_exceldf.to_excel
csv 逗号分割pd.read_csvdf.to_csv
tsv \t分割pd.read_csvdf.to_csv
jsonpd.read_jsonto_json
htmlpd.read_htmldf.to_html
sqlpd.read_sqldf.to_sql

1.1 Excel文件

保存数据:

import pandas as pd

#  1、定义一个列表嵌套的数据,作为DataFrame表格数据
list_data = [
    [1, '张三', '1999-3-10', 18],
    [2, '李四', '2002-3-10', 15],
    [3, '王五', '1990-3-10', 33],
    [4, '隔壁老王', '1983-3-10', 40]
]

# 2、将以上的列表数据转为DataFrame
df = pd.DataFrame(data=list_data, columns=['id', 'name', 'birthday', 'age'])

# 3、保存数据到excel
# sheet_name:表名
# index:是否保存df行索引值
# header:是否保存df列名
#sep= 可以指定分隔符
df.to_excel('test1.xls', sheet_name='student', index=False, header=True)
df.to_excel('test2.xlsx',sheet_name='student',index=True,header=True)

读取数据

# 4、读取Excel数据
student1 = pd.read_excel('test1.xlsx')
print(student1)
print('------------------------')
#index_col:读取excel文件时,将excel中原来的行索引继续当成行索引,默认读取的列名是:Unnamed: 0
#index_col:如果不指定行索引,则又会在df前边加新的行索引
student2= pd.read_excel('test2.xlsx',index_col='Unnamed: 0')
print(student2)

1.2 CSV文件

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

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

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

  • 保存数据

import pandas as pd

#  1、定义一个列表嵌套的数据,作为DataFrame表格数据
data = [
    [1, '张三', '1999-3-10', 18],
    [2, '李四', '2002-3-10', 15],
    [3, '王五', '1990-3-10', 33],
    [4, '老王', '1983-3-10', 40]
]

# 2、将以上的列表数据转为DataFrame
df = pd.DataFrame(data=data, columns=['id', 'name', 'birthday', 'age'])
print(df)

# 3、将df写入csv文件,使用默认分隔符逗号
#  写行索引,写表头(列名)
df.to_csv('test1.csv', index=True,header=True)

#  不行索引,写表头(列名)
df.to_csv('test2.csv', index=False,header=True)


# 4、将df写入csv文件,使用指定分隔符
df.to_csv('test3.csv', index=False,header=True,sep='#')

# 5、将df写入tsv文件,使用指定分隔符为\t
df.to_csv('test4.tsv', index=False,header=True,sep='\t')

读取数据

# 读取csv文件
# index_col:通过列下标或列名指定某列为索引
# parse_dates: 将指定列解析为日期时间类型, 通过列下标或列名指定列
df2 = pd.read_csv('test1.csv', index_col=['Unnamed: 0'], parse_dates=['birthday'])
print(df2)
stdf2.info()


# 读取csv文件,如果文件的分隔符不是逗号,则需要用参数sep执行你文件的分隔符
df2 = pd.read_csv('test3.csv',sep='#')
print(df2)

# 输出结果如下
   id      name   birthday  age
0   1      张三 1999-03-10   18
1   2      李四 2002-03-10   15
2   3      王五 1990-03-10   33
3   4  隔壁老王 1983-03-10   40
<class 'pandas.core.frame.DataFrame'>
Int64Index: 4 entries, 0 to 3
Data columns (total 4 columns):
 #   Column    Non-Null Count  Dtype         
---  ------    --------------  -----         
 0   id        4 non-null      int64         
 1   name      4 non-null      object        
 2   birthday  4 non-null      datetime64[ns]
 3   age       4 non-null      int64         
dtypes: datetime64[ns](1), int64(2), object(1)
memory usage: 160.0+ bytes
            Unnamed: 0  id      name  age
birthday                                 
1999-03-10           0   1      张三   18
2002-03-10           1   2      李四   15
1990-03-10           2   3      王五   33
1983-03-10           3   4  隔壁老王   40
DatetimeIndex(['1999-03-10', '2002-03-10', '1990-03-10', '1983-03-10'], dtype='datetime64[ns]', name='birthday', freq=None)

2 读写数据库

如果想利用pandas和MySQL数据库进行交互,需要先安装与数据库交互所需要的pymysqlsqlalchemy python包

虚拟机的python解析器已经安装好这两个包,无需重复安装

pip install pymysql

pip install sqlalchemy

2.1 保存数据

  • 准备要写入数据库的数据

import pandas as pd

#  1、定义一个列表嵌套的数据,作为DataFrame表格数据
data = [
    [1, '张三', '1999-3-10', 18],
    [2, '李四', '2002-3-10', 15],
    [3, '王五', '1990-3-10', 33],
    [4, '老王', '1983-3-10', 40]
]

# 2、将以上的列表数据转为DataFrame
df = pd.DataFrame(data=data, columns=['id', 'name', 'birthday', 'age'])
print(df)

# 输出结果如下
   id      name   birthday  age
0   1      张三  1999-3-10   18
1   2      李四  2002-3-10   15
2   3      王五  1990-3-10   33
3   4  隔壁老王  1983-3-10   40

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

# 导入sqlalchemy的数据库引擎
from sqlalchemy import create_engine

# 创建数据库引擎,传入url规则的字符串,test数据库必须存在,否则报错
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数据库

# 导入sqlalchemy的数据库引擎
from sqlalchemy import create_engine

# 创建数据库引擎,传入url规则的字符串,test数据库必须存在,否则报错
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 规定编码格式

2.2 读取数据

  • 指定表名, 指定列名

  • # 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:传入sql语句
    # con:数据库交互引擎对象
    student = pd.read_sql(sql='select name,age from student where age > 20', con=engine)
    print(student)
    
    pd.read_sql_query(sql='select name,age from student where age > 20', con=engine)
    print(student)

    总结

    请对下面的内容 有印象、能找到、能理解、能看懂

  • 写文件方法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)

  • 25
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值