pandas数据分析

1、pandas的数据结构分析

1、Series是一维的数据结构

2、DataFrame是二维的、表格型的数据结构

1.1、Series

1、Series是一个类似于一维数组的对象,能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据与之相关的索引两部分构成。

2、Series类构造方法创建

class pandas.Series(data=None,index=None,dtype=None,
name=None,copy=False,fastpath=False)

上述构造方法中常用参数的含义如下:

(1)data:传入的数据,可以是ndarray、list等

(2)index:索引,必须是唯一的,且与数据的长度相同。如果没有传入参数,则默认会自动创建一个0~N的整数索引

(3)dtype:数据的类型

(4)copy:是否复制数据,默认为False

import pandas as pd #导入pandas库
# 创建Series类对象,并指定索引
ser_obj = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
# 获取ser_obj的索引
ser_obj.index
# 获取ser_obj的数据
ser_obj.values
1.2、DataFrame

1、DataFrame是一个类似于二维数组或表格的对象,每列的数据可以是不同的数据类型。与Series的结构相似,DataFrame的结构也是由索引和数据组成的,不同的是,DataFrame的索引不仅有行索引,还有列索引。

2、构造方法创建

pandas.DataFrame(data=None,index=None,columns=None,
dtype=None,copy=False)

常用参数含义如下:

(1)index:行标签,默认会自动创建一个0~N的整数索引

(2)columns:列标签,默认会自动创建一个0~N的整数索引

import numpy as np
import pandas as pd
# 创建数组
demo_arr = np.array([['a', 'b', 'c'], ['d', 'e', 'f']])
# 常见DataFrame对象,指定列索引
df_obj = pd.DataFrame(demo_arr, columns=['No1', 'No2', 'No3'])
# 通过列索引的方式获取一列数据
element = df_obj['No2']
# 通过属性获取列数据
element = df_obj.No2

注意:在获取DataFrame的一列数据时,一般使用列索引的方式获取。

3、增加、删除一列数据

# 增加No4一列数据
df_obj['No4'] = ['g', 'h']
# 删除No3一列数据
del df_obj['No3']

2、Pandas索引操作及高级索引

2.1、索引对象

1、Pandas中的索引都是Index类对象,又称为索引对象,该对象是不可以进行修改的,以保障数据的安全。索引不支持可变操作

2、创建两个共用同一个Index对象的Series类对象

ser_obj1 = pd.Series(range(3), index=['a', 'b', 'c'])
ser_obj2 = pd.Series(range(3), index=ser_obj1.index)
2.2、重置索引

1、reindex()方法的作用是对原索引和新索引进行匹配

reindex()方法的语法格式如下:

DataFrame.reindex(labels=None,inedx=None,columns=None,
axis=None,method=None,copy=True,level=None,
fill_value=nan,limit=None,tolerance=None)

参数含义如下:

(1)index:用作索引的新序列

(2)method:插值填充方式

(3)fill_value:引入缺失值时使用的替代值

(4)limit:前向或者后向填充时的最大填充量

ser_obj = pd.Series([1, 2, 3, 4, 5], index=['c', 'd', 'a', 'b', 'e'])
# 重新索引时指定填充的缺失值
ser_obj2 = ser_obj.reindex(['a', 'b', 'c', 'd', 'e','f'],fill_value=6)

fill_value参数会让所有的缺失数据都填充为同一个值。

2、method参数

fill或pad			前向填充值
bfill或backfill		后向填充值
nearest				从最近的索引值填充
# 创建Series对象,并为其指定索引
ser_obj3 = pd.Series([1,3,5,7],index=[0,2,4,6])
# 重新索引,前向填充值
ser_obj3.reindex(range(6),method='ffill')
# 重新索引,后向填充值
ser_obj3.reindex(range(6),method='bfill')
2.3、索引操作
1、Series的索引操作

既可以通过索引的位置来获取,也可以使用索引名称来获取。

ser_obj = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
ser_obj[2]  # 使用索引位置获取数据
ser_obj['c']  # 使用索引名称获取数据

使用切片来获取数据

ser_obj[2:4]    # 使用位置索引进行切片,取值区间为前闭后开
ser_obj['c':'e']    # 使用索引名称进行切片,取值结果都为闭区间

获取不连续的数据

ser_obj[[0,2,4]]    # 通过不连续位置索引获取数据集
ser_obj[['a','c','d']]  # 通过不连续的索引名称获取数据集

创建布尔型索引来筛选数据

ser_bool = ser_obj>2    # 创建布尔型Series对象
ser_obj[ser_bool]   # 获取结果为True的数据
2、DataFrame的索引操作

DataFrame既包含行索引,也包含列索引。行索引通过index属性获取,列索引通过columns属性获取。

arr = np.arange(12).reshape(3, 4)
# 创建DataFrame对象,并为其指定列索引
df_obj = pd.DataFrame(arr, columns=['a', 'b', 'c', 'd'])
df_obj['b']  #获取b列的数据
df_obj[['b', 'd']]  # 获取不连续的Series对象
df_obj[:2]  # 使用切片获取第0~1行的数据
# 使用多个切片先通过行索引获取第0~2行的数据
# 再通过不连续列索引获取第b、d列的数据
df_obj[:3][['b', 'd']]

使用Pandas提供的方法操作索引

(1)loc:基于标签索引(索引名称,如a、b等),用于按标签选取数据。当执行切片操作时,既包含起始索引,也包含结束索引。

(2)iloc:基于位置索引(整数索引,从0到length-1),用于按位置选取数据。当执行切片操作时,只包含起始索引,不包含结束索引。

arr=np.arange(16).reshape(4,4)
dataframe_obj=pd.DataFrame(arr,columns=['a','b','c','d'])
dataframe_obj.loc[:,['c','a']]
dataframe_obj.iloc[:,[2,0]]	# 结果与loc结果相同
dataframe_obj.loc[1:2,['b','c']]
dataframe_obj.iloc[1:3,[1,2]]	# 结果与loc结果相同

3、算术运算与数据对齐

Pandas执行算术运算时,会先按照索引进行对齐,对齐之后再进行相应的运算,没有对齐的位置会用NaN进行补齐。Series按行索引对齐,DataFrame按行索引和列索引对齐。

obj_one = pd.Series(range(10, 13), index=range(3))
obj_two = pd.Series(range(20, 25), index=range(5))
obj_one+obj_two     # 执行相加运算,没有对齐的位置使用NaN值进行填充

若不希望使用NaN来填充缺失值,调用add方法时提供fill_value参数的值对数据进行填充。

obj_one.add(obj_two,fill_value=0)   # 执行加法运算,补充缺失值

4、数据排序

4.1、按索引排序

Pandas按索引排序使用sort_index()方法,该方法可以用行索引或者列索引进行排序,sort_index()语法格式如下:

sort_index(axis=0,level=None,ascending=True,inplace=False,
 kind='quicksort',na_position='last',sort_remaining=True)

参数含义如下:

(1)axis:轴索引(排序的方向),0表示index(按行),1表示columns(按列)。

(2)level:若不为None,则对指定索引级别的值进行排序。

(3)ascending:是否升序排列,默认为True,表示升序。

(4)inplace:默认为False,表示对数据表进行排序,不创建新的实例。

(5)kind:选择排序算法。

ser_obj = pd.Series(range(10, 15), index=[5, 3, 1, 3, 2])
ser_obj.sort_index()  # 按索引进行升序排列
ser_obj.sort_index(ascending=False)  # 按索引进行降序排列
df_obj = pd.DataFrame(np.arange(9).reshape(3, 3), index=[4, 3, 5])
df_obj.sort_index()  # 按行索引升序排列
df_obj.sort_index(ascending=False)  # 按行索引降序排列

注意:当DataFrame进行排序操作时,要注意轴的方向。如果没有指定axis参数的值,则默认会按照行索引进行排序;如果指定axis=1,则会按照列索引进行排序。

4.2、按值排序

Pandas中按值排序的方法为sort_values(),该方法的语法格式为:

sort_values(by,axis=0,ascending=True,inplace=False,
            kind='quicksort',na_position='last')

参数含义如下:

(1)by:表示排序的列。

(2)na_position:只有两个值:first和last,若设为first,则会将NaN值放在开头;若设为last,则会将NaN值放在最后。

ser_obj = pd.Series([4, np.nan, 6, np.nan, -3, 2])
ser_obj.sort_values()  # 按值升序排列
df_obj = pd.DataFrame([[0.4, -0.1, -0.3, 0.0], [0.2, 0.6, -0.1, -0.7], [0.8, 0.6, -0.5, 0.1]])
df_obj.sort_values(by=2)  # 对列索引为2的数据进行排序

注意:当Series对象调用sort_value()方法按值进行排序时,所有缺失值默认都会放在末尾。在DataFrame中,sort_value()方法可以根据一个或多个列中的值进行排序,但是需要在排序时将一个或多个列的索引传递个by参数才行。

5、统计计算与描述

5.1、常见的统计计算
函数名称 说 明 函数名称 说 明
sum 计算和 std 样本值的标准差
mean 计算平均值 skew 样本值的偏度(三阶矩)
median 获取中位数 kurt 样本值的峰度(四个阶矩)
max、min 获取最大值和最小值 cumsum 样本值的累积和
idxmax、idxmin 获取最大和最小索引值 cummin、cummax 样本值的累积最小值和累积最大值
count 计算非NaN值的个数 cumprod 样本值的累计积
head 获取前N个值 describe 对Series和DataFrame列计算汇总统计
var 样本值的方差
df_obj=pd.DataFrame(np.arange(12).reshape(3,4),columns=['a','b','c','d'])
df_obj.sum()    # 计算每列的和
df_obj.max()    # 获取每列的最大值
df_obj.min(axis=1)  # 沿着横向轴,获取每行的最小值
5.2、统计描述

describe()方法的语法格式

describe(percentiles=None, include=None, exclude=None)

参数含义:

(1)percentiles:输出中包含的百分数,位于[0,1]之间。如果不设置该参数,则默认为[0.25,0.5,0.75],返回25%,50%,75%分位数。

(2)include,exclude:指定返回结果的形式。
pandas数据分析_第1张图片

你可能感兴趣的:(python,python)