3.Pandas基本介绍——Series与DataFrame创建、读取与保存数据的方法

1.pandas介绍与环境安装

Pandas包是基于Python平台的数据管理利器,已经成为了Python进行数据分析和挖掘时的数据基础平台和事实上的工业标准。
使用Pandas包完成数据读入、数据清理、 数据准备、图表呈现等工作,为继续学习数据建模和数据挖掘打下坚实基础。
安装pandas

pip install pandas==1.3.5 # 最稳定的版本

2.Series对象创建

Series:一维数组,与Numpy中的一维array类似。它是一种类似于一维数组的对象,是由一组数据(各种 NumPy 数据类型)以及一组与之相关的数据标签(即索引)组成。仅由一组数据也可产生简单的Series 对象。用值列表生成 Series 时,Pandas 默认自动生成整数索引 。
简单来说,就是对numpy的一维数组array进行升级,多加了一个索引index

# 创建Series方法
import pandas as pd
# 1.使用列表创建
data = pd.Series([3,4,5,6,7])
print('1.使用列表创建:', data)

# 2.使用列表创建,指定index
data = pd.Series([3,4,5,6,7],index=['a','b','c','d','e'])
print('2.使用列表创建,指定index:', data)

# 3.使用list列表指定index
data = pd.Series([3,4,5,6,7],index=list("abcde"))
print('3.使用list列表指定index', data)

# 4.字典创建,默认将key作为index
population_dict = {'ch':2800,'bj':3000,'gz':1500,'sz':1200}
population_series = pd.Series(population_dict)
print('4.字典创建,默认将key作为index', population_series)

# 5.使用字典创建Series对象,指定index,存在时取交集进行显示
sub_series = pd.Series(population_dict,index=['bj','gz'])
print('5.使用字典创建Series对象,指定index,存在时取交集进行显示', sub_series)

# 6.使用字典创建Series对象,指定index,不存在时显示NaN
sub_series = pd.Series(population_dict,index=['bj','abc'])
print('5.使用字典创建Series对象,指定index,存在时取交集进行显示', sub_series)

# 7.查看Series的索引index
print('7.查看Series的索引index:',data.index)

# 8.查看Series的值values
print('8.查看Series的值value',data.values)

3.DataFrame对象创建


DataFrame 是 Pandas 中的一个表格型的数据结构,包含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型等),DataFrame 即有行索引也有列索引,可以被看做是由 Series 组成的字典。
将两个series对象作为dict的value传入,就可以创建一个DataFrame对象。
简单来说,就是对Series(或者说numpy二维的数组)进行升级,添加了行列索引。

# 创建DataFrame对象
import pandas as pd
import numpy as np
# 1.通过创建Serirs来创建DataFrame
# 创建字典
population_dict = {'bj':3000,'sh':213,'gz':999}
area_dict = {'bj':111,'sh':876,'gz':425}
# 创建series对象
population_series = pd.Series(population_dict)
area_series = pd.Series(area_dict)
# 创建DataFrame
citys = pd.DataFrame({'area':area_series,"population":population_series})
print('1.通过创建Serirs来创建DataFrame:\n',citys)

# 2.通过列表创建DataFrame(不添加列索引index)
# 创建字典
# 创建DataFrame
data = pd.DataFrame([population_dict, area_dict])
print('2.通过列表创建DataFrame(不添加列索引index)\n',data)

# 3.通过列表创建DataFrame(添加列索引index)
# 创建字典
# 创建DataFrame
citys = pd.DataFrame([population_dict, area_dict],index=['population','area'])
print('3.通过列表创建DataFrame(添加列索引index)\n',citys)

# 4.索引columns的使用
# DataFrame使用Series生成一维数组时,默认没有列索引
population_series = pd.Series(population_dict)
data = pd.DataFrame(population_series,columns=['population'])
print("4.索引columns的使用:\n",data)

# 5.array创建DataFrame,二维数组指定columns和index
data = pd.DataFrame(np.random.randint(0,10,(3,2)),columns=list('ab'),index=list('efg'))
print('5.array创建DataFrame,二维数组指定columns和index:\n',data)

# 6.查看DataFrame的行索引index 列索引columns 值values
print('行索引index:\n',citys.index)
print('列索引columns:\n',citys.columns)
print('值values:\n',citys.values)


4.Pandas中Index对象

pandas中的index(行索引),是一个不可变的一维数组

import pandas as pd
import numpy as np
# pandas中的index(行索引),是一个不可变的一维数组
data = pd.DataFrame(np.random.randint(0,100,(3,4)), index=list('abc'), columns=list('ABCD'))
print('DataFrame:\n',data)

# 1.获取行索引
ind = data.index
print('1.获取行索引:',ind)

# 2.根据索引下标获取索引值
print('2.根据索引下标获取索引值:\n',ind[2])

# 3.切片获取值
print('3.切片获取值\n',ind[::2])

# 4.有ndmin shape dtype size属性
print('ndmin:',ind.ndim, 'shape:',ind.shape, 'dtype:',ind.dtype, 'size:',ind.size)

# 5. 但是不可以进行修改索引值
try:
    ind[3]=200
except:
    print('5.不可以修改索引值')

5.Pandas(Python)导入Excel文件

使用read_excel()方法导入文件,首先要指定文件的路径。
说明
使用Pandas模块操作Excel时候,需要安装openpy
1.导入Excel文件

import pandas as pd
# 1.导入Excel文件
# 设置显示行数(列数)
pd.options.display.max_rows = 5
pd.options.display.max_columns = 5
pd.read_excel('stu_data.xlsx')


2.导入Excel文件,指定导入Excel中哪个Sheet

# 2.导入Excel文件,指定导入Excel中哪个Sheet
# 2.1 方法1:指定名称
pd.read_excel('stu_data.xlsx',sheet_name='Target')
# 2.2 方法2:指定Sheet索引
pd.read_excel('stu_data.xlsx',sheet_name=1)


# 3.导入Excel文件时,指定行索引、列索引

# 3.导入Excel文件时,通过index_col指定行索引
data = pd.read_excel('stu_data.xlsx',sheet_name=0, index_col=0)
print(data)
# 导入Excel文件时,通过header指定列索引
pd.read_excel('stu_data.xlsx',sheet_name=0, header=1)


4.导入Excel文件时,通过usecols指定导入列

# 4.导入Excel文件时,通过usecols指定导入列
pd.read_excel('stu_data.xlsx',usecols=[1,2,3])

6.Pandas(Python)导入csv文件

导入csv文件时除了指明文件路径,还需要设置编码格式。Python中用得比较多的两种编码格式是UTF-8和gbk,默认编码格式是UTF8。我们要根据导入文件本身的编码格式进行设置,通过设置参数encoding来设置导入的编码格式。

此csv文件时gbk格式,以逗号进行分隔数据
导入csv文件,指定文件的编码格式(默认是UTF-8)

import pandas as pd
# 导入csv文件,指定文件的编码格式(默认是UTF-8)
# UnicodeDecodeError: 'utf-8' codec can't decode byte 0xba in position 2: invalid start byte
# 产生报错,尝试指定gbk(大小写无所谓)
pd.read_csv('stu_data.csv',encoding='GBK')


导入csv文件,指明分隔符(默认是,)
用分隔符号进行分隔。常用的分隔符除了逗号、空格,还有制表符(\t)。

# 导入csv文件,指明分隔符(默认是,)
df = pd.read_csv('stu_data.csv',encoding='gbk',sep=' ')
print('错误使用分隔符:\n',df)
df = pd.read_csv('stu_data.csv',encoding='gbk',sep=',')
print('正确使用分隔符:\n',df)

7.Pandas(Python)导入txt文件

导入.txt文件用得方法时read_table(),read_table()是将利用分隔符分开的文件导入。DataFrame的通用函数。它不仅仅可以导入.txt文件,还可以导入.csv文件。

import pandas as pd
# 导入txt文件
# 指定分隔符(默认是\t) 指定编码格式encoding(默认是utf-8 大小写忽略)
pd.read_table('stu_data.txt',encoding='UTF-8',sep='\t')

8.Pandas读取数据库中数据

import pandas as pd
import pymysql
# 获取数据库的mysql连接
con = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    db='sxt',
    port=3306
)
sql = 'select * from t_user'
# 读去数据库中的数据,可以使用index_col设置索引列,默认是自动使用0-n
data1 = pd.read_sql(sql,con=con,index_col='id')

# 查询年龄大于10岁的
sql = 'select uname, age, sex, pwd from t_user where age>10'
data2 = pd.read_sql(sql, con=con)
data2

9.Pandas保存数据到CSV或Excel

import pandas as pd
# 读取文件保存为csv
df = pd.read_excel('stu_data.xlsx')
# df.to_csv(
    # path_or_buf: 要保存的文件路径 默认是相对路径
    # sep 分隔符(默认是逗号)
    # columns:需要到处的变量列表
    # header =True 指定到处数据的新变量名,可以直接提供list
    # index = True 是否导出索引
    # mode = 'w' Python写模式
    # encoding = ‘utf-8' 默认到处的文件编码格式
# )

df.to_csv("temp.csv",index=False)

# 读取文件保存为Excel
# df.to_excel(
    # filepath_or_buffer: 要读入的文件路径
    # sheet_name = 1 要保存的Sheet表单名称
# )
df.to_excel('temp_exl.xlsx',index=False, sheet_name="data")

10.Pandas保存数据到数据库

import pandas as pd
import pymysql
df = pd.read_excel('stu_data.xlsx')
# 保存数据到mysql数据库中
# con = pymysql.connect(
#     host='localhost',
#     user='root',
#     password='root',
#     port=3306,
#     db='sxt',
#     charset='utf8'
# )
# 报错:DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting
# 解决方法:更换引擎con
from sqlalchemy import create_engine
con = create_engine('mysql+pymysql://root:root@localhost:3306/sxt?charset=utf8')
# df.to_sql(
#     name :将要存储数据的表名称
#     con : 连接引擎名称
#     if_exists = 'fail' :指定表已经存在时的处理方式
#              fail :不做任何处理(不插入新数据)
#              replace :删除原表并重建新表
#              append :在原表后插入新数据
#     index = True :是否导出索引 )
df.to_sql('t_stu',con=con,if_exists='append')

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年12月7日
下一篇 2023年12月7日

相关推荐