前言

pandas主要分为如下几个阶段:

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

首先,导入相应模块

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'])

说明:

  1. index:行索引,可以不写
  2. columns:列索引,必须得写
  3. data:数据
  • 方法二:
pd.DataFrame(data={
    'name':['ss','zs','lh'],
    'age':[20,22,21],
    'gender':['男','男','女'],
    'class':['0831','0831','0831']
})

生成的表格:

age class gender name
0 20 0831 ss
1 22 0831 zs
2 21 0831 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))  #<class 'numpy.ndarray'>
[['ss' 20 '男' '0831']
 ['zs' 22 '男' '0831']
 ['lh' 21 '女' '0831']]
<class 'numpy.ndarray'>

三、元素操作

1、dataframe查找

(1) 一维切片

df['name']
# 切完是一维的,返回的是series类型,仅限于一列值的查找

(2) 二维切片

df[['name']]
# 切完是二维的,返回的是dataframe类型

输出结果:仅有一列值的表格

name
a ss
b zs
c lh

(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取出的表格:

name class
a ss 0831
b zs 0831
c lh 0831

例2:
mask可以联合使用,使用逻辑符进行连接

# 获取所有年龄大于18岁的女同学
mask1 = df['age']>18
mask2 = df['gender'] == '女'
mask = mask1 & mask2  # 位运算符(&:且;|:或)
df.loc[mask,:]
name age gender class
c lh 21 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)

说明:

  1. ignore_index=True:表示忽略原始索引,重新设置索引
  2. 添加时,原始表格不会变化,返回一个合并后的表格

3、dataframe删除方法

语法:df.drop(labels, axis=0, level=None, inplace=False, errors=‘raise’)
说明:

  1. labels:删除的哪一行(列),使用索引
  2. axis:删行(列)
  3. inplace:False默认不修改原表,True表示修改原表
# 删除某些列
df2.drop(labels=['address','class'],axis=1)

返回删除之后的表格

age gender name
0 20 ss
1 22 zs
2 21 lh
3 20 ss
4 22 zs
5 21 lh
# 删除某些行
df2.drop(labels = [0,1,2],axis=0)

删除行还是列,根据axis决定

address age class gender name
3 NaN 20 0831 ss
4 NaN 22 0831 zs
5 NaN 21 0831 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      女   有问题      北京
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐