pandas基础1

pandas

功能:
1.表格数据的操作:【增删改查】
2.实现多个表格的处理
3.数据清洗操作:缺失值,重复值,异常值,数据标准化,数据转换的操作
4.实现excel的特殊操作:生成透视表,交叉表
5.完成统计分析

一、构建dataframe

import pandas as pd
import numpy as np
#创建方法一
df = pd.DataFrame(data =[['zs',20,'男','一'],['lihua',18,'女','二'],['lisi',21,'男','三']],#元素,是一个二维数组
                index=['a','b','c'],                        #行索引,可以自己命名行名
                columns = ['name','age','gender','class'])  #列索引,相当于数据库的字段
print(df)
    name  age gender class
a     zs   20      男     一
b  lihua   18      女     二
c   lisi   21      男     三
#创建方法二
df2 =pd.DataFrame(data ={'name':['wu','maliu','ss'],
                         'age':[19,18,22],
                         'gender':['男','女','男'],
                         'class':['三','一','二']})
print(df2)
    name  age gender class
0     wu   19      男     三
1  maliu   18      女     一
2     ss   22      男     二

二、dataframe属性

print('df结构:\n',df.shape)
print('df维度:\n',df.ndim)
print('df元素个数:\n',df.size)

print('df数据类型:\n',df.dtypes)#元素的类型
print('df的列索引:\n',df.index)#行的索引
print('df的列索引:\n',df.columns)#列的索引
print('df的元素:\n',type(df.values))  # <class 'numpy.ndarray'>
df结构:
 (3, 4)
df维度:
 2
df元素个数:
 12
df数据类型:
 name      object
age        int64
gender    object
class     object
dtype: object
df的列索引:
 Index(['a', 'b', 'c'], dtype='object')
df的列索引:
 Index(['name', 'age', 'gender', 'class'], dtype='object')
df的元素:
 <class 'numpy.ndarray'>

三、dataframe的增删改查

(一)、dataframe的查询

#1单列的切法,用列表
ser = df['name']   #一维的切法,返回series类型,只有一个轴
print(type(ser)) 
print(ser)
<class 'pandas.core.series.Series'>
a       zs
b    lihua
c     lisi
Name: name, dtype: object
# 2多列的切法,用列表套列表,先切列,后切行
df[['name','age']][:2]  #切多列值的方法,列表套列表,
nameage
azs20
blihua18
#3使用索引切片:df.loc[行索引名称/条件,列的索引名称] ,前闭后闭
print(df.loc['a',:])     #返回一维的series类型
print(df.loc['a','name'])#索引为a的name
print(df.loc[['a','b'],['name','age']]) #列表+列表是二维
name      zs
age       20
gender     男
class      一
Name: a, dtype: object
zs
    name  age
a     zs   20
b  lihua   18
#4条件切片
mask1 =df['age']>18   #年龄大于18岁的
mask2 =df['gender']=='女'
mask = mask1&mask2
print(mask)
df.loc[mask,['name','gender']]  #满足mask的name和gender

#***mask3 =mask1 & mask2 表示and运算   mask3 =mask1 | mask2 表示or运算
a    False
b    False
c    False
dtype: bool
df.iloc[:,1]    #取索引前闭后开,取第二列
a    20
b    18
c    21
Name: age, dtype: int64
df.iloc[-1,:]   #取最后一行
name      lisi
age         21
gender       男
class        三
Name: c, dtype: object
df.iloc[-1,:].index  #查找字段名
Index(['name', 'age', 'gender', 'class'], dtype='object')

(二)、dataframe的增加方法

#增加一列,相当于数据库的字段
df['address'] = ['北京','上海','南京']  
print(df)
    name  age gender class address
a     zs   20      男     一      北京
b  lihua   18      女     二      上海
c   lisi   21      男     三      南京
#增加行
df3 = df.append(df2,ignore_index=True) #增加行,ignore_index=True表示自动排序
print(df3)
  address  age class gender   name
0      北京   20     一      男     zs
1      上海   18     二      女  lihua
2      南京   21     三      男   lisi
3     NaN   19     三      男     wu
4     NaN   18     一      女  maliu
5     NaN   22     二      男     ss

(三)、dataframe的删除方法

df.drop(labels=['address'],axis=1)  #删除['address']列
nameagegenderclass
azs20
blihua18
clisi21
df3.drop(labels=[0,1,2],axis=0,inplace=False)  #删除前三行
#inplace=False ,默认是删除后不修改原来的表,如果inplace=True,则原来的表也要改变
addressageclassgendername
3NaN19wu
4NaN18maliu
5NaN22ss

(四)、dataframe的修改方法

print(df)
    name  age gender class address
a     zs   20      男     一      北京
b  lihua   18      女     二      上海
c   lisi   21      男     三      南京
#将名字为zs的人的class改成'有问题'
df.loc[df['name']=='zs','class']='有问题'
print(df)
    name  age gender class address
a     zs   20      男   有问题      北京
b  lihua   18      女     二      上海
c   lisi   21      男     三      南京

三、统计分析方法

# #1.延用numpy中的10个统计方法
# 在series和dataframe中通用的方法
# df.min()  最小值
# df.max()  最大值
# df.std()  标准差
# df.var()   方差
# df.mean()  均值
# df.mode() 众数
# df.idxmax(axis=0)   最小索引
# df.idxmin(axis=0)  最大索引
# df.count()         频数

# #只用series中存在的方法
# ser.value_counts()  频数统计

#2.其他方法
np.ptp(df['age'])      #极差
3
#3.pandas的方法
print(df3)
  address  age class gender   name
0      北京   20     一      男     zs
1      上海   18     二      女  lihua
2      南京   21     三      男   lisi
3     NaN   19     三      男     wu
4     NaN   18     一      女  maliu
5     NaN   22     二      男     ss
df3['age'].min()         #df与series中通用  最小值:18 
df3['age'].max()         #df与series中通用  最大值:22
df3['age'].std()         #df与series中通用 标准差:1.632993161855452
df3['age'].argmax()        #只能series中通用 最大值索引:5     #最好不要用,一般使用idxmax,会有警告提示

df3['age'].mode()  #众数:0    18      #df与series中通用
df3['age'].count()   #表示非空数目:6     #df与series中通用
df3['age'].value_counts()#表示频数统计   #只能在series中通用  

18    2
22    1
21    1
20    1
19    1
Name: age, dtype: int64
#针对df类型
df3['grade'] =[89,80,69,77,88,95] 
print(df3)


print(df3[['age','grade']].idxmax(axis=1))  #最大值索引,行向比较:【一维,二维都可以使用】
print(df3[['age','grade']].idxmax(axis=0))  #最大值索引,纵向比较:【一维,二维都可以使用】

  address  age class gender   name  grade
0      北京   20     一      男     zs     89
1      上海   18     二      女  lihua     80
2      南京   21     三      男   lisi     69
3     NaN   19     三      男     wu     77
4     NaN   18     一      女  maliu     88
5     NaN   22     二      男     ss     95
0    grade
1    grade
2    grade
3    grade
4    grade
5    grade
dtype: object
age      5
grade    5
dtype: int64
print(df3.mode())   #众数  【ser和dataframe中可以使用】
  address   age class gender   name  grade
0      上海  18.0     一      男  lihua     69
1      北京   NaN     三    NaN   lisi     77
2      南京   NaN     二    NaN  maliu     80
3     NaN   NaN   NaN    NaN     ss     88
4     NaN   NaN   NaN    NaN     wu     89
5     NaN   NaN   NaN    NaN     zs     95
print(df3[['age','grade']].describe()) #对数字类型进行描述
#count:f
             age      grade
count   6.000000   6.000000
mean   19.666667  83.000000
std     1.632993   9.444575
min    18.000000  69.000000
25%    18.250000  77.750000
50%    19.500000  84.000000
75%    20.750000  88.750000
max    22.000000  95.000000
print(df3[['age','gender']].describe()) #对字符串类型进行描述

#count:非空数目
#unique:去重之后有几个值
#top:众数
#freq:众数出现的次数
             age
count   6.000000
mean   19.666667
std     1.632993
min    18.000000
25%    18.250000
50%    19.500000
75%    20.750000
max    22.000000
print(df3[['age','name']].describe()) #对数值型和字符串类型进行描述,自动去除字符串,返回数值型数据

             age
count   6.000000
mean   19.666667
std     1.632993
min    18.000000
25%    18.250000
50%    19.500000
75%    20.750000
max    22.000000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值