文章目录
前言
pandas主要分为如下几个阶段:
表格数据操作:增删改查
实现多个表格的处理
数据清洗操作:缺失值、重复值、异常值、数据标准化、数据转换的操作;
实现所有的excel的特殊操作:生成透视表,交叉表;
完成统计分析;
首先,导入相应模块
import pandas as pd
import numpy as np
一、构建dataframe
dataframe是一种表格型数据结构,拥有axis=0,axis=1(),所以dataframe类型肯定是二维的
方法一:
df = pd.DataFrame(data=[['ss',20,'男','0831'],['zs',22,'男','0831'],['lh',21,'女','0831']], index=['a','b','c'], columns=['name','age','gender','class'])
说明:
index:行索引,可以不写
columns:列索引,必须得写
data:数据
方法二:
pd.DataFrame(data={
'name':['ss','zs','lh'],
'age':[20,22,21],
'gender':['男','男','女'],
'class':['0831','0831','0831']
})
生成的表格:
ageclassgendername0200831男ss
1220831男zs
2210831女lh
二、dataframe属性
1.结构
print('结构:',df.shape)
结构: (3, 4)
2.维度
print(df.ndim)
2
3.元素个数
print(df.size)
12
4.元素类型
print(df.dtypes)
name object
age int64
gender object
class object
dtype: object
5.查看列索引
print(df.columns)
Index(['name', 'age', 'gender', 'class'], dtype='object')
6.查看行索引
print(df.index)
Index(['a', 'b', 'c'], dtype='object')
7.查看数据
print(df.values)
print(type(df.values)) #
[['ss' 20 '男' '0831']
['zs' 22 '男' '0831']
['lh' 21 '女' '0831']]
三、元素操作
1、dataframe查找
(1) 一维切片
df['name']
# 切完是一维的,返回的是series类型,仅限于一列值的查找
(2) 二维切片
df[['name']]
# 切完是二维的,返回的是dataframe类型
输出结果:仅有一列值的表格
nameass
bzs
clh
(3)索引切片:
语法:df.loc [ 行索引名称/条件,列的索引名称 ]
# df.loc['a','name']
df.loc['a',:] # 返回一维series类型
df.loc[['a','b'],'name'] # 行(列)其中一个传入列表,返回一维series类型
输出:
a ss
b zs
Name: name, dtype: object
行(列)两个都传入列表类型,返回二维dataframe类型
print(df.loc[['a','b'],['name','age']])
输出:
name age
a ss 20
b zs 22
(4)条件切片
使用mask,生成bool值表格,根据布尔值取值
# 获取所有年龄大于18岁的同学
mask = df['age']>18
print(mask)
df.loc[mask,'name']
df.loc[mask,['name','class']]
布尔值mask表格:
a True
b True
c True
Name: age, dtype: bool
根据mask取出的表格:
nameclassass0831
bzs0831
clh0831
例2:
mask可以联合使用,使用逻辑符进行连接
# 获取所有年龄大于18岁的女同学
mask1 = df['age']>18
mask2 = df['gender'] == '女'
mask = mask1 & mask2 # 位运算符(&:且;|:或)
df.loc[mask,:]
nameagegenderclassclh21女0831
(5)索引切片
df.iloc[行的位置索引,列的位置索引]
# df.iloc[:2,2:] # 前闭后开
df.iloc[-1,:].index
Index(['name', 'age', 'gender', 'class'], dtype='object')
2、dataframe增加方法
(1)添加一列
# 分别给每一个元素添加address
df['address'] = ['北京','上海','北京']
print(df)
输出:
name age gender class address
a ss 20 男 0831 北京
b zs 22 男 0831 上海
c lh 21 女 0831 北京
当给一个值时,可将所有元素的address改为同一个值
df['address'] = '北京'
print(df)
输出:
name age gender class address
a ss 20 男 0831 北京
b zs 22 男 0831 北京
c lh 21 女 0831 北京
(2)添加一行
使用append方法
df_mini = pd.DataFrame(data={
'name':['ss','zs','lh'],
'age':[20,22,21],
'gender':['男','男','女'],
'class':['0831','0831','0831']})
# df.append(df_mini)
df2 = df.append(df_mini,ignore_index=True)
说明:
ignore_index=True:表示忽略原始索引,重新设置索引
添加时,原始表格不会变化,返回一个合并后的表格
3、dataframe删除方法
语法:df.drop(labels, axis=0, level=None, inplace=False, errors=‘raise’)
说明:
labels:删除的哪一行(列),使用索引
axis:删行(列)
inplace:False默认不修改原表,True表示修改原表
# 删除某些列
df2.drop(labels=['address','class'],axis=1)
返回删除之后的表格
agegendername020男ss
122男zs
221女lh
320男ss
422男zs
521女lh
# 删除某些行
df2.drop(labels = [0,1,2],axis=0)
删除行还是列,根据axis决定
addressageclassgendername3NaN200831男ss
4NaN220831男zs
5NaN210831女lh
4、dataframe更该数值方法
# 例:将名字为‘lh’的人的班级改为‘有问题’
df.loc[df['name']=='lh','class'] = '有问题'
print(df)
输出:
name age gender class address
a ss 20 男 0831 北京
b zs 22 男 0831 北京
c lh 21 女 有问题 北京