【Python】Pandas 数据分析 函数合集

一、生成测试数据

import pandas as pd
from faker import Faker
import random
import numpy as np

fake = Faker("zh_CN") # 初始化,可生成中文数据

#设置字段
#index = []
for i in range(1,12):
    exec('x'+str(i)+'=[]')

#设置样本
prod_cd = ['W00028','W00021','W00022']
prod_nm = ['微信支付','银联扫码支付','转账']
channel = ['APP','微信','短信']
year = ['2020','2021','2022']

#循环生成数据10行,具体多少行可以根据需求修改
for i in range(10):
    date = random.choice(year)+fake.date()[4:]
    x1.append('1'+str(fake.random_number(digits=8))) # 随机数字,参数digits设置生成的数字位数
    x2.append(fake.name()) #姓名
    x3.append(fake.ssn()) # 身份证
    x4.append(random.choice('男女')) 
    x5.append(random.randint(18,25))
    x6.append(fake.job())
    x7.append(random.randint(0,1000000))
    x8.append(random.choice(prod_cd))
    x9.append(random.choice(prod_nm))
    x10.append(random.choice(channel))
    x11.append(date)

#创建数据表
datas = pd.DataFrame({
    'user_id':x1,
    'name':x2,
    'ID_card':x3,
    'gender':x4,
    'age':x5,
    'job':x6,
    'salary':x7,
    'product_id':x8,
    'product':x9,
    'channel':x10,
    'prt_dt':x11
    })
    
datas

运行效果:
在这里插入图片描述

二、删除指定行、列:drop()

语法格式

DataFrame.drop(
        self,
        labels=None,
        axis: Axis = 0,
        index=None,
        columns=None,
        level: Level | None = None,
        inplace: bool = False,
        errors: str = "raise",
    )

# labels:要删除的行列的名字,接收列表参数,列表内有多个参数时表示删除多行或者多列
# axis:要删除的轴,与labels参数配合使用。默认为0,指删除行;axis=1,删除列
# index:直接指定要删除的行
# columns:直接指定要删除的列
# inplace:是否直接在原数据上进行删除操作,默认为False(删除操作不改变原数据),而是返回一个执行删除操作后的新dataframe;inplace=True,直接在原数据上修改。
datas.drop(labels='job',axis=1,inplace=True) #删除列
datas

运行效果:
在这里插入图片描述

三、删除指定列:del()

语法格式:
 del df[‘列名’]
del datas['channel']
datas

运行效果:
在这里插入图片描述

四、判断数据是否缺失

1.判断是否存在缺失数据:isnull()

判断序列元素是否为缺失(返回与序列长度一样的bool值)
datas.isnull()

运行效果:
在这里插入图片描述

2.判断值是否不为缺失:notnull()

datas.notnull()

运行效果:
在这里插入图片描述

3.判断存在缺失值”列”:.isnull().any()

datas.isnull().any()

运行效果:
在这里插入图片描述

4.统计每一列中缺失值的个数:.isnull().sum()

datas.isnull().sum()

运行效果:
在这里插入图片描述

五、删除值

1.删除缺失值:dropna()

语法格式:

DataFrame.dropna(
        self,
        axis: Axis = 0,
        how: str = "any",
        thresh=None,
        subset=None,
        inplace: bool = False,
    )

# axis:移除行或列,默认为0,即行含有空值移除行
# how:‘all’所有值为空移除,'any’默认值,包含空值移除
# thresh:包含thresh个空值时移除
# subset:axis轴上,指定需要处理的标签名称列表
# inplace:是否替换原始数据,默认False

删除含有NaN值的所有行 (axis=0 默认为0)

datas.dropna()

2. 删除含有NaN值的所有列

datas.dropna(axis=1 )

3. 删除元素都是NaN值的行

设置参数 how="all",只有行一整行数据都是NaN的时候才会删除
datas.dropna(axis=0,how="all")

4. 删除元素都是NaN值的列

datas.dropna(axis=1,how="all")

5. 删除指定列中含有缺失的行

subset参数设置指定列
datas.dropna(subset=["data1"], axis=0)

六、填充值

测试数据

df = pd.DataFrame({'Colum1': ['a', 'b', 'c', 'd', 'd', 'e', 'f', 'g'],
                       'Colum2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})

1.对缺失值进行填充:fillna()

语法格式:

fillna(
        self,
        value: object | ArrayLike | None = None,
        method: FillnaOptions | None = None,
        axis: Axis | None = None,
        inplace: bool = False,
        limit=None,
        downcast=None,
    ) -> DataFrame | None

# value:用于填充的空值的值。
# method: {‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None。定义了填充空值的方法, pad / ffill表示用前面行/列的值,填充当前行/列的空值, backfill / bfill表示用后面行/列的值,填充当前行/列的空值。
# axis:选择轴,默认0(行),axis=1:列
# inplace:是否替换原始数据
# limit:int, default None。如果method被指定,对于连续的空值,这段连续区域,最多填充前 limit 个空值(如果存在多段连续区域,每段最多填充前 limit 个空值)。如果method未被指定, 在该axis下,最多填充前 limit 个空值(不论空值连续区间是否间断)
# downcast:dict, default is None,字典中的项为,为类型向下转换规则。或者为字符串“infer”,此时会在合适的等价类型之间进行向下转换,比如float64 to int64 if possible。
# 用0填充空值

printf(df.fillna(value=0))

运行效果
在这里插入图片描述

2.用前一行的值填补空值

设置参数 method='pad' 用前一行的值填补空值
printf(df.fillna(method='pad',axis=0))

运行效果
在这里插入图片描述

3.用后一列的值填补空值

设置参数 method='backfill'
printf(df.fillna(method='backfill', axis=1))

运行效果
在这里插入图片描述

5.设置填充个数

limit=数字,设置填充个数
printf(df.fillna(method='backfill', axis=0, limit=1))

运行效果
在这里插入图片描述

6.用前一个元素填充:ffill()

前向后填充缺失值,用缺失值的前一个元素填充,与fillna()相比没有那么多可选性

语法格式:

ffill(
        self: DataFrame,
        axis: None | Axis = None,
        inplace: bool = False,
        limit: None | int = None,
        downcast=None,
    ) -> DataFrame | None
df = pd.DataFrame({'Colum1': ['a', 'b', 'c', 'd', 'd', 'e', 'f', 'g'],
                       'Colum2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df )
print(df .ffill())

运行效果
在这里插入图片描述

七、用后一个元素填充:bfill()

后向填充缺失值,用缺失值的后一个元素填充
df = pd.DataFrame({'Colum1': ['a', 'b', 'c', 'd', 'd', 'e', 'f', 'g'],
                       'Colum2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df )
print(df .bfill())

运行效果
在这里插入图片描述

八、判断序列元素是否重复:duplicated()

DataFrame.duplicated(subset=None,keep='first')

subset:列标签,可选, 默认使用所有列,只考虑某些列来识别重复项传入列标签或者列标签的序列

keep:{‘first’,‘last’,False},默认’first’
first:删除第一次出现的重复项。
last:删除重复项,除了最后一次出现。
false:删除所有重复项
df = pd.DataFrame({'Colum1': ['a', 'b', 'c', 'd', 'e', 'f', 'f', 'g'],
                       'Colum2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df)
print(df.duplicated())

运行效果
在这里插入图片描述

九、删除重复行:drop_duplicates()

DataFrame.drop_duplicates(
        self,
        subset: Hashable | Sequence[Hashable] | None = None,
        keep: Literal["first"] | Literal["last"] | Literal[False] = "first",
        inplace: bool = False,
        ignore_index: bool = False,
    ) -> DataFrame | None

参数说明:

subset:列标签,可选, 默认使用所有列,只考虑某些列来识别重复项传入列标签或者列标签的序列

keep:{‘first’,‘last’,False},默认’first’
	first:删除第一次出现的重复项。
	last:删除重复项,除了最后一次出现。
	false:删除所有重复项

inplace:是否替换原数据,默认是False,生成新的对象,可以复制到新的DataFrame

ignore_index:bool,默认为False,如果为True,则生成的轴将标记为0,1,…,n-1。

列:
1.所有列:

df = pd.DataFrame({'Colum1': ['a', 'b', 'c', 'd', 'e', 'f', 'f', 'g'],
                       'Colum2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df)
print(df.drop_duplicates())

在这里插入图片描述
2.指定列

print(df)
print(df.drop_duplicates('Colum1'))

运行效果:
在这里插入图片描述

七、分割值

expand:默认为True
import numpy as np
import pandas as pd

df_yj = {'硬件':['键盘|鼠标|显示屏']}

df_yj = pd.DataFrame(data)
print(df_yj)
print(df_yj['硬件'].str.split('|',expand=True))

运行效果:
在这里插入图片描述

八、替换值

语法格式:
replace(
        self,
        to_replace=None,
        value=None,
        inplace: bool = False,
        limit=None,
        regex: bool = False,
        method: str = "pad",
    )

参数说明:
to_replace: 需要替换的值
value:替换后的值
inplace: 是否在原数据表上更改,默认 inplace=False
limit:向前或向后填充的最大尺寸间隙,用于填充缺失值
regex: 是否模糊查询,用于正则表达式查找,默认 regex=False

method: 填充方式,用于填充缺失值
	pad: 向前填充
	ffill: 向前填充
	bfill: 向后填充

1.单值替换

替换值
df = pd.DataFrame({'Colum1': ['a', 'b', 'c', 'd', 'e', 'f', 'f', 'g'],
                       'Colum2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df)
print(df.replace('a','b'))

应用效果
在这里插入图片描述

2.多值替换

print(df.replace(['a','c','d'],'b'))

运行效果:
在这里插入图片描述

print(df.replace(['b','d'],['a','c']))

运行效果:
在这里插入图片描述

3.正则表达式替换

to_replace接收正则语法,设置 regex=True
df = pd.DataFrame({'Colum1': ['aaa', 'ab', 'c', 'd', 'e', 'f', 'f', 'g'],
                       'Colum2': [1, 1, 2, 3, np.NaN, 5, 5, np.NaN]})
print(df)
print(df.replace('a.?',"A",regex=True))

运行效果:
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值