Pandas内容回顾

pandas基础

1.数据结构Series和Dataframe

Series类似numpy中的一维数组可调用一维数组的函数与方法DataFrame为多维数组,同样可运用numpy的函数和方法(注:识别数据结构的类型,是Series还是DataFrame很关键)

ar = np.arange(5)   #创建一维数组
print(type(ar))  output: <class 'numpy.ndarray'> 
ser = pd.Series(ar) #创建一维序列Series
print(type(ser))    pandas.core.series.Series
df1 = pd.DataFrame(ar)  #创建数据框DataFrame
print(type(df))      pandas.core.frame.DataFrame
通过多维数组创建DataFrame
arr2 = np.array(np.arange(12)).reshape(4,3)
df1 = pd.DataFrame(arr2)
通过字典创建DataFrame
dic = {'a':[1,2,3,4],'b':[5,6,7,8],'c':[9,10,11,12],'d':[13,14,15,16]}
df = pd.DataFrame(dic)
通过DataFrame创建DataFrame
df2 = df[["a","c"]]

2.数据索引行index与列columns

通过索引标签()获取数据
df[["a","c"]]
如果是索引列的话用columns
df.columns[0:5]

3.查询数据

数据集
    Age  Height     Name Sex  Weight
0   14    69.0   Alfred   M   112.5
1   13    56.5    Alice   F    84.0
2   13    65.3  Barbara   F    98.0
3   14    62.8    Carol   F   102.5
4   14    63.5    Henry   M   102.5
查询指定的行
df.loc[[0,2,4,5,7]] #行号索引
查询指定的列(无列名)
df.columns[0:3]
查询指定的列(有列名)
student[['Name','Height','Weight']]
通过loc索引标签查询指定的列
student.loc[:,['Name','Height','Weight']] #loc为轴索引
student.iloc[0:5,1:3] #iloc为数字索引
查询出所有12岁以上的女生信息
student[(student['Sex']=='F') & (student['Age']>12)]
查询出所有12岁以上的女生姓名、身高和体重
student[(student['Sex']=='F') & (student['Age']>12)][['Name','Height','Weight']]

4.利用pandas的DataFrames进行统计分析

np.random.seed(1234)
d1 = pd.Series(2*np.random.normal(size = 100)+3)
d2 = np.random.f(2,4,size = 100)
d3 = np.random.randint(1,100,size = 100)

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()) #一次性输出多个描述性统计指标

5.利用pandas实现SQL操作

增:添加新行或增加新列
student3 = pd.concat([student,student2]) #使两个数据框上下粘结在一起
删:删除制定列
student.drop(['Height','Weight'],axis=1)
    根据布尔索引删除行数据
student[student['Age']>14]
查和改已经介绍过
聚合:   #聚合完数据类型仍为DataFrames
pandas模块中可以通过groupby()函数实现数据的聚合操作
student.groupby('Sex').mean()
聚合过程中对原始数据进行限制
student.drop('Age',axis=1).groupby('Sex').mean()
对多个分组变量进行聚合
student.groupby(['Sex','Age']).mean()
对每个分组进行多个统计量计算
student.drop('Age',axis=1).groupby('Sex').agg([np.mean,np.median])
排序:
使用sort_index和sort_values实现序列和数据框的排序
Data.sort_index()
Data.sort_values(ascending=False)
多表链接 merge
pd.merge(student, score, on='Name') #student与score均为Dataframes数据类型.
注意,默认情况下,merge函数实现的是两个表之间的内连接,即返回两张表中共同部分的数据。可以通过how参数设置连接的方式,left为左连接;right为右连接;outer为外连接。

6. 利用pandas进行缺失值的处理

删除法:
s.dropna()

替补法:对于连续型变量,如果变量的分布近似或就是正态分布的话,可以用均值替代那些缺失值;如果变量是有偏的,可以使用中位数来代替那些缺失值;对于离散型变量,我们一般用众数去替换那些存在缺失的观测。
print(df.fillna(method='ffill'))  # 前项填充
print(df.fillna(method='bfill'))# 后项填充
df["x1"].fillna(df['x1'].median())  #中位数填充

插补法:插补法是基于蒙特卡洛模拟法,结合线性模型、广义线性模型、决策树等方法计算出来的预测值替换缺失值。(后续补充)

7. 利用pandas实现Excel的数据透视表功能

pivot_table(data,values=None,
            index=None,
            columns=None,
            aggfunc='mean',
            fill_value=None,
            margins=False,
            dropna=True,
            margins_name='All')  
data:需要进行数据透视表操作的数据框
values:指定需要聚合的字段
index:指定某些原始变量作为行索引
columns:指定哪些离散的分组变量
aggfunc:指定相应的聚合函数
fill_value:使用一个常数替代缺失值,默认不替换
margins:是否进行行或列的汇总,默认不汇总
dropna:默认所有观测为缺失的列
margins_name:默认行汇总或列汇总的名称为'All'

针对如下DataFrames在这里插入图片描述

#一个分组变量Sex一个数值变量Height
Table1 = pd.pivot_table(student, values=['Height'], columns=['Sex'])
print(Table1)
Sex             F      M
Height  60.588889  63.91
#一个分组变量(Sex),两个数值变量(Height,Weight)
Table2 = pd.pivot_table(student, values=['Height','Weight'], columns=['Sex'])
print(Table2)
Sex             F       M
Height  60.588889   63.91
Weight  90.111111  108.95
#两个分组变量(Sex,Age),两个数值变量(Height,Weight)
Table4 = pd.pivot_table(student, values=['Height','Weight'], columns=['Sex','Age']).unstack()
print(Table4)
Age          11          12    13      14      15     16
    Sex                                               
Height F    51.3   58.050000  60.9   63.55   64.50    NaN
     M      57.5   60.366667  62.5   66.25   66.75   72.0
Weight F    50.5   80.750000  91.0   96.25  112.25    NaN
     M      85.0  103.500000  84.0  107.50  122.50  150.0
#使用多个聚合函数
Table5 = pd.pivot_table(student, values=['Height','Weight'], columns=['Sex'],aggfunc=[np.mean,np.median,np.std])
print(Table5)
                mean           median             std           
Sex             F       M      F       M          F          M
Height  60.588889   63.91   62.5   64.15   5.018328   4.937937
Weight  90.111111  108.95   90.0  107.25  19.383914  22.727186

8. 多层索引的使用

pandas可以帮我们实现用低维度形式处理高维数数据

#Series的层次化索引,索引是一个二维数组,相当于两个索引决定一个值
#有点类似于DataFrame的行索引和列索引
以下为Series 的多层索引
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]])
print(s)   #内层索引为abcd,外层为123
a  1    1
   2    2
   3    3
b  1    4
   2    5
c  3    6
   1    7
d  2    8
   3    9
dtype: int64
print(s.index)
MultiIndex(levels=[['a', 'b', 'c', 'd'], [1, 2, 3]],
         labels=[[0, 0, 0, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 2]]) #多层索引
#选取外层索引为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())
1    1
2    2
3    3
dtype: int64
1
1    1
3    3
dtype: int64
a  1    1
   2    2
   3    3
c  3    6
   1    7
dtype: int64
b  1    4
   2    5
c  3    6
   1    7
d  2    8
   3    9
dtype: int64
   1    2    3
a  1.0  2.0  3.0
b  4.0  5.0  NaN
c  7.0  NaN  6.0
d  NaN  8.0  9.0

参考链接:
pandas官方文档
阿里天池pandas基础

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值