Pandas基础


在pandas中有两类非常重要的数据结构,即序列Series和数据框DataFrame。Series类似于numpy中的一维数组,除了通吃一维数组可用的函数或方法,而且其可通过索引标签的方式获取数据,还具有索引的自动对齐功能;DataFrame类似于numpy中的二维数组,同样可以通用numpy数组的函数和方法

import numpy as np, pandas as pd

数据索引

通过索引值或索引标签获取数据
s4 = pd.Series(np.array([1,1,2,3,5,8]))
print(s4)
print(s4.index)

RangeIndex(start=0, stop=6, step=1)

s4.index = ['a','b','c','d','e','f']
print(s4)

a 1
b 1
c 2
d 3
e 5
f 8
dtype: int64

自动化对齐
s5 = pd.Series(np.array([10,15,20,30,55,80]),index = ['a','b','c','d','e','f'])
print(s5)

s6 = pd.Series(np.array([12,11,13,15,14,16]),index = ['a','c','g','b','d','f'])
print(s6)
print(s5 + s6)

a 22.0
b 30.0
c 31.0
d 44.0
e NaN
f 96.0
g NaN
dtype: float64
由于s5中没有对应的g索引,s6中没有对应的e索引,所以数据的运算会产生两个缺失值NaN

利用pandas查询数据

#查询数据的前5行或末尾5行
student.head()
student.tail()
#查询指定的行
student.loc[[0,2,4,5,7]] 
#查询指定的列,多个列的话,必须使用双重中括号
student[['Name','Height','Weight']].head()
student.loc[:,['Name','Height','Weight']].head()
#查询出所有12岁以上的女生信息
student[(student['Sex']=='F') & (student['Age']>12)]
#查询出所有12岁以上的女生姓名、身高和体重
student[(student['Sex']=='F') & (student['Age']>12)][['Name','Height','Weight']]

利用pandas的DataFrames进行统计分析

pandas模块为我们提供了非常多的描述性统计分析的指标函数,如总和、均值、最小值、最大值等

print('非空元素计算: ', d1.count()) #非空元素计算
print('最小值: ', d1.min()) #最小值
print('最大值: ', d1.max()) #最大值
print('最小值的位置: ', d1.idxmin()) #最小值的位置,类似于R中的which.min函数
print('最大值的位置: ', d1.idxmax()) #最大值的位置,类似于R中的which.max函数
print('10%分位数: ', d1.quantile(0.1)) #10%分位数
print('求和: ', d1.sum()) #求和
print('均值: ', d1.mean()) #均值
print('中位数: ', d1.median()) #中位数
print('众数: ', d1.mode()) #众数
print('方差: ', d1.var()) #方差
print('标准差: ', d1.std()) #标准差
print('平均绝对偏差: ', d1.mad()) #平均绝对偏差
print('偏度: ', d1.skew()) #偏度
print('峰度: ', d1.kurt()) #峰度
print('描述性统计指标: ', d1.describe()) #一次性输出多个描述性统计指标

自定义一个函数,将这些统计描述指标全部汇总到一起

def stats(x):
	return pd.Series([x.count(),x.min(),x.idxmin(),x.quantile(.25),x.median(),x.quantile(.75),
                      x.mean(),x.max(),x.idxmax(),x.mad(),x.var(),x.std(),x.skew(),x.kurt()],
                     index = ['Count','Min','Whicn_Min','Q1','Median','Q3','Mean','Max',
                              'Which_Max','Mad','Var','Std','Skew','Kurt'])
df = pd.DataFrame(np.array([d1,d2,d3]).T,columns=['x1','x2','x3'])
print(df.head())
print(df.apply(stats))

实现SQL操作

在SQL中常见的操作主要是增、删、改、查几个动作

增:添加新行或增加新列
pd.concat([student,student2])
pd.DataFrame(student2, columns=['Age','Height','Name','Sex','Weight','Score']))

新增的列没有赋值,就会出现空NaN的形式

删:删除表、观测行或变量列
#删除数据框student2
del student2
#删除指定的行
student.drop([0,1,3,6])
#根据布尔索引删除行数据
student[student['Age']>14]
#删除指定的列
student.drop(['Height','Weight'],axis=1)
改:修改原始记录的值
student3.loc[student3['Name'] == 'LiuShunxiang','Height']=173
print(student3[student3['Name'] == 'LiuShunxiang'][['Name','Height']])
聚合:groupby()函数实现数据的聚合操作
student.groupby('Sex').mean()

student.groupby(['Sex','Age']).mean()
排序
Data.sort_index()
student.sort_values(by = ['Age','Height'])
多表连接

merge函数实现的是两个表之间的内连接,即返回两张表中共同部分的数据。可以通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接

pd.merge(student, score, on='Name')
pd.merge(student, score, on='Name', how='left')

缺失值的处理

现实生活中的数据是非常杂乱的,其中缺失值也是非常常见的,对于缺失值的存在可能会影响到后期的数据分析或挖掘工作

  1. 删除法:当数据中的某个变量大部分值都是缺失值,可以考虑删除改变量;当缺失值是随机分布的,且缺失的数量并不是很多是,也可以删除这些缺失的观测。
  2. 替补法:对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测。 替补法:对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测。
  3. 插补法:插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。插补法:插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。

删除

#num函数和isnull函数来检测数据中含有多少缺失值
print(sum(pd.isnull(s)))
#删除缺失值,要含有缺失值NaN,该数据行就会被删除
s.dropna()

填补

#0填补所有缺失值
df.fillna(0)
#采用前项填充或后向填充
print(df.fillna(method='ffill'))
print(df.fillna(method='bfill'))
#使用常量填充不同的列
print(df.fillna({'x1':1,'x2':2,'x3':3}))

Excel的数据透视表功能

多层索引的使用

s = pd.Series(np.arange(1,10),index=[["a","a","a","b","b","c","c","d","d"],[1,2,3,1,2,3,1,2,3]])

在这里插入图片描述

#选取外层索引为a的数据
print(s['a'])
#选取外层索引为a和内层索引为1的数据
print(s['a',1])
#选取外层索引为a和内层索引为1,3的数据
print(s['a'][[1,3]])
#层次化索引的切片,包括右端的索引
print(s[['a','c']])
print(s['b':'d'])
#通过unstack方法可以将Series变成一个DataFrame
#数据的类型以及数据的输出结构都变成了DataFrame,对于不存在的位置使用NaN填充
print(s.unstack())

https://tianchi.aliyun.com/notebook/detail.html?spm=5176.11510288.0.0.42dcb7bd0xCrmI&id=6068

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值