Python数据分析—— pandas统计分析基础 (一)
Pandas—数据分析核心库
pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
提供了一系列能够快速、便捷地处理结构化数据的数据结构和函数。
高性能的数组计算功能以及电子表格和关系型数据库(如 SQL)灵活的数据处理功能。
复杂精细的索引功能,以便便捷地完成重塑、切片和切块、聚合及选取数据子集等操作
文本文件读取
open函数来打开文件,read函数用来读取数据。但是读取进来的数据都是str格式,非常不方便我们进行分析。pandas提供了read_csv函数可以将文件按照固定的格式进行读取,函数能够自动解析数据类型,铁架列明与索引等很多功能,能够以结构化的dataframe形式存储数据。
csv是一种逗号分隔的文件格式,因为其分隔符不一定是逗号,又被称为字符分隔文件,文件以纯文本形式存储表格数据(数字和文本)。
使用read_table来读取文本文件
pandas.read_table(filepath_or_buffer, sep=’\t’, header=’infer’, names=None,
index_col=None, dtype=None, engine=None, nrows=None)
使用read_csv函数来读取csv文件
pandas.read_csv(filepath_or_buffer, sep=’\t’, header=’infer’, names=None,
index_col=None, dtype=None, engine=None,
nrows=None)
read_table和read_csv常用参数及其说明:
例:
import pandas as pd
## 使用read_table读取订单信息表
order = pd.read_table('meal_order_info.csv', sep = ',',encoding = 'gbk')
print('使用read_table读取的订单信息表的长度为:',len(order))
## 使用read_csv读取订单信息表
order1 = pd.read_csv(meal_order_info.csv', encoding = 'gbk')
print('使用read_csv读取的订单信息表的长度为:',len(order1))
注:1.不要尝试去读取excel文件,最好使用通用的csv或者txt格式
2.注意编码问题,使用encoding参数
3.注意处理报错行
4.read_table和read_csv函数中的sep参数是指定文本的分隔符的,如果分隔符指定错误,在读取数据的时候,每一行数据将连成一片
DataFrame与Series
dataframe是二维结构化数据,series是一维数据。dataframe有一个或者多个series组成,dataframe的一行或者一列就是一个series
Series
Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组 与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series
例:
>>>obj = Series([4, 7, -5, 3])
>>>obj
0 4
1 7
2 -5
3 3
dtype: int64
DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。
DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共用同一个索引)
DataFrame的常用属性:
例:
import pandas as pd
order_info=pd.read_csv('meal_order_info.csv',sep=',',encoding='gbk')
print(order_info.columns)
print(order_info.head())
detail=pd.read_excel('meal_order_detail.xlsx',encoding='gbk')
## 查看DataFrame的元素个数
print(‘订单详情表的索引为:’, detail.index) ## 查看DataFrame的索引
print('订单详情表的元素个数为:', detail.size)
print(‘订单详情表的列名为:’, detail.columns) ## 查看DataFrame的列名
print('订单详情表的维度数为:', detail.ndim) ## 查看DataFrame的维度数
print('订单详情表的形状为:', detail.shape) ## 查看DataFrame的形状
DataFrame类型
从二维ndarray对象创建
import pandas as pd
import numpy as np
d = pd.DataFrame(np.arange(10).reshape(2,5))
d
Out[10]:
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
从一维ndarray对象字典创建
例:
import pandas as pd
dt = {'one':pd.Series([1,2,3],index=['a','b','c']),
'two':pd.Series([9,8,7,6],index=['a','b','c','d'])}
d = pd.DataFrame(dt)
d
Out[14]:
one two
a 1.0 9
b 2.0 8
c 3.0 7
d NaN 6
pd.DataFrame(dt,index=['b','c','d'],columns=['two','three'])
Out[16]:
two three
b 8 NaN
c 7 NaN
d 6 NaN
从列表类型的字典创建
例:
import pandas as pd
d1 = {'one':[1,2,3,4],'two':[9,8,7,6]}
d = pd.DataFrame(d1,index = ['a','b','c','d'])
d
Out[20]:
one two
a 1 9
b 2 8
c 3 7
d 4 6
重新索引
.reindex()能够改变或重排Series和DataFrame索引
.reindex(index=None,columns=None,...)
例:
import pandas as pd
d1 = {'城市':['北京','上海','广州','深圳','沈阳'],
'环比':[101.5,101.2,101.3,102.0,100.1],
'同比':[120.7,127.3,119.4,140.9,101.4],
'定基':[121.4,127.8,120.0,145.5,101.6]}
d = pd.DataFrame(d1,index=['c1','c2','c3','c4','c5'])
d
Out[32]:
城市 环比 同比 定基
c1 北京 101.5 120.7 121.4
c2 上海 101.2 127.3 127.8
c3 广州 101.3 119.4 120.0
c4 深圳 102.0 140.9 145.5
c5 沈阳 100.1 101.4 101.6
d = d.reindex(index=['c5','c4','c3','c2','c1'])
d
Out[34]:
城市 环比 同比 定基
c5 沈阳 100.1 101.4 101.6
c4 深圳 102.0 140.9 145.5
c3 广州 101.3 119.4 120.0
c2 上海 101.2 127.3 127.8
c1 北京 101.5 120.7 121.4
常用参数:
例:
newc = d.columns.insert(4,'新增')
newd = d.reindex(columns=newc,fill_value=200)
newd
Out[37]:
城市 环比 同比 定基 新增
c5 沈阳 100.1 101.4 101.6 200
c4 深圳 102.0 140.9 145.5 200
c3 广州 101.3 119.4 120.0 200
c2 上海 101.2 127.3 127.8 200
c1 北京 101.5 120.7 121.4 200
索引类型的常用方法
删除指定索引对象
.drop()能够删除Series和DataFrame指定行或列索引
d
Out[52]:
城市 环比 同比 定基
c5 沈阳 100.1 101.4 101.6
c4 深圳 102.0 140.9 145.5
c3 广州 101.3 119.4 120.0
c2 上海 101.2 127.3 127.8
c1 北京 101.5 120.7 121.4
d.drop('c5')
Out[53]:
城市 环比 同比 定基
c4 深圳 102.0 140.9 145.5
c3 广州 101.3 119.4 120.0
c2 上海 101.2 127.3 127.8
c1 北京 101.5 120.7 121.4
d.drop('同比',axis=1)
Out[54]:
城市 环比 定基
c5 沈阳 100.1 101.6
c4 深圳 102.0 145.5
c3 广州 101.3 120.0
c2 上海 101.2 127.8
c1 北京 101.5 121.4
axis为0时表示删除行,axis为1时表示删除列。
常用参数如下所示:
Pandas数据类型运算
算术运算法则:算术运算根据行列索引,补齐后运算,运算默认产生浮点数
补齐时缺项填充NaN(空值)
采用+ - * / 符号进行的二元运算产生新的对象
例:
import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(12).reshape(3,4))
a
Out[58]:
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
b = pd.DataFrame(np.arange(20).reshape(4,5))
b
Out[60]:
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9
2 10 11 12 13 14
3 15 16 17 18 19
a + b
Out[61]:
0 1 2 3 4
0 0.0 2.0 4.0 6.0 NaN
1 9.0 11.0 13.0 15.0 NaN
2 18.0 20.0 22.0 24.0 NaN
3 NaN NaN NaN NaN NaN
a * b
Out[62]:
0 1 2 3 4
0 0.0 1.0 4.0 9.0 NaN
1 20.0 30.0 42.0 56.0 NaN
2 80.0 99.0 120.0 143.0 NaN
3 NaN NaN NaN NaN NaN
方法形式的运算
例:
b.add(a,fill_value = 100)
Out[63]:
0 1 2 3 4
0 0.0 2.0 4.0 6.0 104.0
1 9.0 11.0 13.0 15.0 109.0
2 18.0 20.0 22.0 24.0 114.0
3 115.0 116.0 117.0 118.0 119.0
a.mul(b,fill_value = 0)
Out[64]:
0 1 2 3 4
0 0.0 1.0 4.0 9.0 0.0
1 20.0 30.0 42.0 56.0 0.0
2 80.0 99.0 120.0 143.0 0.0
3 0.0 0.0 0.0 0.0 0.0
注:fill_value参数替代NaN,替代后参与运算
比较运算法则
比较运算只能比较相同索引的元素,不进行补齐
采用> < >= <= == !=等符号进行的二元运算产生布尔对象
例:
import pandas as pd
import numpy as np
a = pd.DataFrame(np.arange(12).reshape(3,4))
a
Out[68]:
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
b = pd.DataFrame(np.arange(12,0,-1).reshape(3,4))
b
Out[71]:
0 1 2 3
0 12 11 10 9
1 8 7 6 5
2 4 3 2 1
a > b
Out[72]:
0 1 2 3
0 False False False False
1 False False False True
2 True True True True
a == b
Out[73]:
0 1 2 3
0 False False False False
1 False False True False
2 False False False False
注:用维度运算,尺寸一致