Pandas的核心数据结构:Series和DataFrame
Pandas是基于Numpy的专业数据分析工具,可以灵活高效的处理各种数据集,也是我们后期分析案例的神器。它提供了两种类型的数据结构,分别是DataFrame和Series,我们可以简单粗暴的把DataFrame理解为Excel里面的一张表,而Series就是表中的某一列,也就是:
- 分别代表一维的序列和二维的表结构
- 基于这两种结构:Pandas可以对数据进行导入、清洗、处理、统计和输出
Series 序列
- 1.Series是个固定长度的字典序列
- 与字典结构区别:存储的时候相当于两个ndarray,而字典结构里面元素的个数是不确定的。
- 2、两个基本属性:index和values
- index默认是递增的整数序列;0,1,2,3…,也可以是自定义的序列:index=[‘a’,‘b’,‘c’,‘d’]。
pandas 的Series的使用实例:
import pandas as pd
from pandas import Series, DataFrame
x1 = Series([1,2,3,4]) # 使用默认的方式指定index
x2 = Series(data=[1,2,3,4], index=['a','b','c','d']) # 使用指定的方式指定index
print(x1)
print(x2) # 最后会输出数据类型
'''
# 运行结果:
0 1
1 2
2 3
3 4
dtype: int64
a 1
b 2
c 3
d 4
dtype: int64
'''
# 使用字典的方式创建Series
d = {
'a':1, 'b':2, 'c':3, 'd':4}
x3 = Series(d)
print(x3)
'''
运行结果
a 1
b 2
c 3
d 4
dtype: int64
'''
DataFrame 类型数据结构类似于数据库表
(遵循的步骤为:数据探索->数据清洗->数据统计->结果可视化)
- 包含行索引和列索引,DataFrame可看做由相同索引的Series组成的字典类型。
例如输出同学的考试成绩
import pandas as pd
from pandas import Series, DataFrame
data = {
'Chinese': [66, 95, 93, 90,80],
'English': [65, 85, 92, 88, 90],
'Math': [30, 98, 96, 77, 90]}
# 使用默认的索引0,2,3,4...,对应的列索引为Chinese,English,Math
df1= DataFrame(data)
# 指定行索引为index,列索引为columns(里面的科目是可以换位置的)
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'],
columns=['English', 'Math', 'Chinese'])
print(df1)
print(df2)
'''
# 运行结果:
Chinese English Math
0 66 65 30
1 95 85 98
2 93 92 96
3 90 88 77
4 80 90 90
English Math Chinese
ZhangFei 65 30 66
GuanYu 85 98 95
ZhaoYun 92 96 93
HuangZhong 88 77 90
DianWei 90 90 80
'''
数据的导入
假设现在有数据如下图:
可以使用Pandas导入导出xlsx,csv文件
导入(读取)
- 方式一:读入xlsx:
pd.read_excel('data.xlsx')
- 方式二:读入csv:
pd.read_csv('data.xlsx')
导出(保存)
- 方式一:保存xlsx:
pd.to_excel('data.xlsx')
- 方式二:保存csv:
pd.to_csv('data.xlsx')
例如:
import pandas as pd
from pandas import Series, DataFrame
# 方式一:读入xlsx
score = DataFrame(pd.read_excel('data.xlsx'))
score.to_excel('data1.xlsx')
print(score)
'''
运行结果:
Unnamed: 0 English Math Chinese
0 ZhangFei 65 30 66
1 GuanYu 85 98 95
2 ZhaoYun 92 96 93
3 HuangZhong 88 77 90
4 DianWei 90 90 80
'''
# 注意:1.需要安装xlrd包和openpy包
# 2.需要使用excel创建xlsx文件,否则会包格式错误
需要注意的是:
- 使用excel文件导入的数据的index是已经规定好的了:从0,1,2,3…这样的顺序往下。当我们再设置, index=[‘ZhangFei’, ‘GuanYu’, ‘ZhaoYun’, ‘HuangZhong’, ‘DianWei’]的时候查找出来的都是NaN,因为这样的索引对应的是没有数据的:
import pandas as pd
from pandas import Series, DataFrame
data = DataFrame(pd.read_excel('data.xlsx'))
df1= DataFrame(data)
df2 = DataFrame(data, index=['ZhangFei', 'GuanYu', 'ZhaoYun', 'HuangZhong', 'DianWei'],
columns=['English', 'Math', 'Chinese'])
print(df2)
'''
# 执行的结果
English Math Chinese
ZhangFei NaN NaN NaN
GuanYu NaN NaN NaN
ZhaoYun NaN NaN NaN
HuangZhong NaN NaN NaN
DianWei NaN NaN NaN
'''
- 当把index去掉之后,或者index=[0,1,2,3,4],同时加上name列字段时候,就可以正常查询出数据,也就是说excel表格默认的索引是从0开始的整数,不能自定义索引。
import pandas as pd
from pandas import Series, DataFrame
data = DataFrame(pd.read_excel('data.xlsx'))
df1= DataFrame(data)
# index可去掉
df2 = DataFrame(data, index=[0,1,2,3,4],
columns=['name','English', 'M