8. Python数据处理工具——Pandas

Pandas模块可以解决数据的预处理问题,如数据类型的转换、缺失值的处理、描述性统计分析、数据的汇总等。
本章学习的重点

  • 两种重要的数据结构,即序列和数据框。
  • 如何读取外部数据(如文本文件、电子表格或数据库中的数据)。
  • 数据类型转换及描述性统计分析。
  • 字符型与日期型数据的处理。
  • 常见的数据清洗方法。
  • 如何应用iloc、loc与ix完成数据子集的生成。
  • 实现Excel中的透视表操作。
  • 多表之间的合并和连接。
  • 数据集的分组和聚合操作。

序列和数据框的构造
Pandas模块的核心操作对象就是序列(Series)和数据框(DataFrame)。序列可以理解为数据集中的一个字段,数据框是指至少两个字段(或序列)的数据集。
构造序列
构造一个序列可以通过如下方式实现:

  • 通过同质的列表或元素构建。
  • 通过字典构造。
  • 通过Numpy中的一维数组构建。
  • 通过数据框DataFrame中的某一列构建。
#导入模块
import pandas as pd
import numpy as np
#构造序列
gdp1 = pd.Series([2.8,3.08,3.2,4.5,6.7])
gdp2 = pd.Series({'北京':2.9,'上海':3.01,'广东':8.99,'浙江':23.12})
gdp3 = pd.Series(np.array((2.8,3.08,3.2,4.5,6.7))) 
print(gdp1)
print(gdp2)
print(gdp3)

OUT:
0    2.80
1    3.08
2    3.20
3    4.50
4    6.70
dtype: float64
北京     2.90
上海     3.01
广东     8.99
浙江    23.12
dtype: float64
0    2.80
1    3.08
2    3.20
3    4.50
4    6.70
dtype: float64
#导入模块
import pandas as pd
import numpy as np
#构造序列
gdp1 = pd.Series([2.8,3.08,3.2,4.5,6.7])
gdp2 = pd.Series({'北京':2.9,'上海':3.01,'广东':8.99,'浙江':23.12})
gdp3 = pd.Series(np.array((2.8,3.08,3.2,4.5,6.7))) 
# print(gdp1)
# print(gdp2)
# print(gdp3)

# 取出gdp1中的第一、第四和第五个元素
print('行号风格的序列:\n',gdp1[[0,3,4]])
#取出gdp2中的第一、第四个元素
print('行号风格的序列:\n',gdp2[[0,3]])
#取出gdp2中的上海和浙江的gdp值
print('行名称风格的序列:\n',gdp2[['上海','浙江']])
#数学函数——取对数
print('通过numpy函数:\n',np.log(gdp1))
#平均gdp
print('通过numpy函数:\n',np.mean(gdp1))
print('通过序列的方法:\n',gdp1.mean())

OUT:
行号风格的序列:
 0    2.8
3    4.5
4    6.7
dtype: float64
行号风格的序列:
 北京     2.90
浙江    23.12
dtype: float64
行名称风格的序列:
 上海     3.01
浙江    23.12
dtype: float64
通过numpy函数:
 0    1.029619
1    1.124930
2    1.163151
3    1.504077
4    1.902108
dtype: float64
通过numpy函数:
 4.056
通过序列的方法:
 4.056

构造数据框
数据框实质上就是一个数据集,数据集的行代表每一条观测,数据集的列则代表各个变量。在一个数据框中可以存放不同数据类型的序列,如整数型、浮点型、字符型和日期时间型,数组和序列则没有这样的优势(数组和序列只能存放同质数据。构造数据框的方法:

  • 通过嵌套的列表或元组构造。
  • 通过字典构造。
  • 通过二维数组构造。
  • 通过外部数据读取构造。
import pandas as pd
import numpy as np
df1 = pd.DataFrame([['张三',23,'男'],['李四',27,'女'],['王二',26,'女']])
df2 = pd.DataFrame({'姓名':['张三','李四','王二'],'年龄':[23,27,26],'性别':['男','女','女']})
df3 = pd.DataFrame(np.array([['张三',23,'男'],['李四',27,'女'],['王二',26,'女']]))
print('嵌套列表构造数据框:\n',df1)
print('字典构造数据框:\n',df2)
print('二维数组构造数据框:\n',df3)

OUT:
嵌套列表构造数据框:
     0   1  2
0  张三  231  李四  272  王二  26  女
字典构造数据框:
    姓名  年龄 性别
0  张三  231  李四  272  王二  26  女
二维数组构造数据框:
     0   1  2
0  张三  231  李四  272  王二  26

外部数据的读取
本节内容就是重点介绍如何基于Pandas模块实现文本文件、电子表格和数据框数据的读取。
文本文件的读取
读取txt或csv格式的数据,可以使用Pandas模块中的read_table函数或read_csv函数。
举一个读取txt文件数据的例子。
在这里插入图片描述
上图所呈现的txt格式数据集存在一些常见的问题,具体如下:

  • 数据集并不是从第一行开始的,前面几行实际上是数据集的来源说明,读取数据时需要注意什么问题。
  • 数据集的末尾3行仍然不是需要读入的数据,如何避免后3行数据的读入。
  • 中间部分的数据,第四行前加了#号,表示不需要读取该行,该如何处理。
  • 数据集中的收入一列,千分位符是&,如何将该字符读入为正常的数值型数据。
  • 如何需要将year,month和day三个字段解析为新的birthday字段,该何如解决。
  • 数据集中含有中文,一般在读取含中文文件时都会出现编码错误,该如何解决。
import pandas as pd
user_income = pd.read_table(r'C:\Users\SyGod\Desktop\data_test01.txt',sep=',',parse_dates={'birthday':[0,1,2]},skiprows=2,skipfooter=3,comment='#',encoding='utf-8',thousands='&')
print(user_income)

OUT:
    birthday gender occupation  income
0 1999-03-07      男       销售经理    6000
1 1989-08-10      女        化妆师    8500
2 1998-10-19      男         销售   12000
3 1986-01-01      男      数据分析师   12000

代码说明:由于read_table函数在读入数据时,默认将字段分割符sep设置为Tab制表符,而原始数据集是用逗号分割每一列,所以需要改变sep参数;parse_dates参数通过字典实现前三列的日期解析,合并为新字段birthday;skiprows和skipfooter参数分别实现原数据集开头几行和末尾几行的跳过;由于数据部分的第四行前面加了#号,因此通过comment参数指定跳过特殊行;这里仅改变字符编码参数encoding是不够的,还需要将原始的txt文件另存为UTF-8格式。最后,对于收入一列,由于千分位为&,因此为了保证数值型数据的正常读入,需要设置thousands参数为&。
电子表格的读取
在这里插入图片描述

import pandas as pd
data_test02 = pd.read_excel(io = r'C:\Users\SyGod\Desktop\data_test02.xlsx',header=None,converters={0:str},names={'job_xz','job_name','job_id'})
print(data_test02)

OUT:
  job_id     job_name job_xz
0    001    JAVA开发工程师    14k
1    002    .NET开发工程师    14k
2    003  Python数据分析师    16k
3    004       大数据分析师    18k

数据库数据的读取
从Mysql数据库读取数据。

#读入MySQL数据库数据
#导入第三方模块
import pymysql
import pandas as pd
#连接MYSQL数据库
conn = pymysql.connect(host='****',user='****',password='****',database='****',port=****,charset='****')
#读取数据
user = pd.read_sql('select * from ****',conn)
#关闭连接
conn.close()

print(user)

从SQL Server数据库读取数据。

import pandas as pd
import pymssql
connect = pymssql.connect(server = 'localhost',user='',password='',database='DB1',charset='utf8')
data = pd.read_sql("select * from doker",con=connect)
connect.close()
data.head()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
很好,以下是关于 pandas 预处理的答案: pandas 是一种基于 NumPy 的数据分析工具,提供了大量的函数和方法来处理数据。在数据分析中,预处理数据是非常重要的一步,pandas 提供了多种方法来进行数据预处理,包括数据清洗、缺失值处理、重复值处理、数据转换等。 1. 数据清洗 数据清洗是指对数据进行初步处理,去除不必要的信息和异常值。pandas 提供了多种方法来进行数据清洗,包括: - drop_duplicates:去除重复值。 - dropna:去除缺失值。 - replace:替换指定的值。 - fillna:填充缺失值。 - drop:删除指定的行或列。 2. 缺失值处理 缺失值是指数据中的某些值缺失或为空,pandas 提供了多种方法来处理缺失值,包括: - isnull:判断某个值是否为空。 - notnull:判断某个值是否不为空。 - dropna:删除包含缺失值的行或列。 - fillna:填充缺失值。 3. 重复值处理 重复值是指数据中的某些值出现了重复,pandas 提供了多种方法来处理重复值,包括: - duplicated:判断某个值是否出现过重复。 - drop_duplicates:删除重复值。 4. 数据转换 数据转换是指将数据转换成适合分析的格式或类型,pandas 提供了多种方法来进行数据转换,包括: - astype:将某列数据转换成指定的数据类型。 - apply:对某个列或行应用指定的函数。 - map:对某个列应用指定的映射关系。 - pivot_table:对数据进行透视操作。 以上就是 pandas 预处理的答案,希望对你有所帮助。如果还有其他问题,可以继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁月辰星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值