Pandas 数据处理指南:重复与映射处理

重复元素处理

import numpy as np
import pandas as pd
from pandas import DataFrame

index = ['悟空', '悟饭', '悟天', '武神']
columns = ['语文', '数学', '英语']
data = np.random.randint(0, 150, size=(4, 3))
df = DataFrame(index=index, columns=columns, data=data)
df.iloc[2] = df.iloc[3]
df
语文数学英语
悟空247531
悟饭1232116
悟天504141
武神504141

duplicated()

  • subset: 可选参数,用于指定要检查重复的列名列表。默认为 None,表示检查所有列。
  • keep: 可选参数,表示如何处理重复值。
    keep=‘first’(默认值):保留第一次出现的值,将后续重复值标记为 True。
    keep=‘last’:保留最后一次出现的值,将前面的重复值标记为 True。
    keep=False:将所有重复值标记为 True。
# 重复行都标记为True
df.duplicated(keep=False)
"""
悟空    False
悟饭    False
悟天     True
武神     True
dtype: bool
"""

# 检测重复行; 默认保留第一次出现的行
df.duplicated()
"""
悟空    False
悟饭    False
悟天    False
武神     True
dtype: bool
"""

# 非重复行标记为True
~df.duplicated()
"""
悟空     True
悟饭     True
悟天     True
武神    False
dtype: bool
"""

# 只保留不重复的行
df.loc[~df.duplicated()]
语文数学英语
悟空247531
悟饭1232116
悟天504141

元素映射

replace()函数:替换元素

  • to_replace: 要替换的值,可以是单个值、列表、字典或者 Series。
  • value: 替换的新值,可以是单个值或者列表。
  • inplace: 可选参数,默认为 False。如果设置为 True,则在原始 DataFrame 上进行替换,否则返回一个新的 DataFrame。
  • limit: 可选参数,用于限制替换的数量。
df
语文数学英语
悟空247531
悟饭1232116
悟天504141
武神504141
df.loc['悟天', '数学'] = 88
df.loc['悟天', '英语'] = 63
df.loc['悟天', '语文'] = np.nan
df
语文数学英语
悟空24.07531
悟饭12.032116
悟天NaN8863
武神50.04141
# 替换指定的分数和nan
mapping = {40: 55, 68: 29, 15: 118, np.nan: 0}
df.replace(mapping)
语文数学英语
悟空24.07531
悟饭12.032116
悟天0.08863
武神50.04141

map()函数:新建一列

使用map()函数,由已有的列生成一个新列;适合处理某一单独的列。

mapping = {31: 111, 116: 100, 63: 55, 41: 108}
df['python'] = df['英语'].map(mapping)
df
语文数学英语python
悟空24.07531111
悟饭12.032116100
悟天NaN886355
武神50.04141108
# 使用lambda函数对python列减10
df['python'] = df['python'].map(lambda score: score - 10)
df
语文数学英语python
悟空24.07531101
悟饭12.03211690
悟天NaN886345
武神50.0414198
# 传自定义的函数
def convert(score):
    if score >= 120:
        return '优秀'
    elif 120 > score >= 90:
        return '及格'
    else:
        return '不及格'
df['python_score'] = df['python'].map(convert)
df
语文数学英语pythonpython_score
悟空24.07531101及格
悟饭12.03211690及格
悟天NaN886345不及格
武神50.0414198及格

rename()函数:替换索引

  • mapper: 可以是字典、函数或者 Series。用于指定新的行索引或列标签。
  • index: 可选参数,用于指定是否重命名行索引,默认为 True。
  • columns: 可选参数,用于指定是否重命名列标签,默认为 False。
  • axis: 可选参数,用于指定重命名的方向,0 表示行索引,1 表示列标签。
  • inplace: 可选参数,默认为 False。如果设置为 True,则在原始 DataFrame 上进行重命名,否则返回一个新的 DataFrame。

rename 专门操作索引的;对索引进行重命名.

df
语文数学英语pythonpython_score
悟空24.07531101及格
悟饭12.03211690及格
悟天NaN886345不及格
武神50.0414198及格
# 重命名列标签
df.rename(columns={'英语': '物理', 'python_score': 'python及格线'})
语文数学物理pythonpython及格线
悟空24.07531101及格
悟饭12.03211690及格
悟天NaN886345不及格
武神50.0414198及格
# 重命名行索引
df.rename(index={'悟天': 'wutian', '武神': 'wuwshen'})
语文数学英语pythonpython_score
悟空24.07531101及格
悟饭12.03211690及格
wutianNaN886345不及格
wuwshen50.0414198及格
# 使用函数重命名: 将行索引转成大写
df.rename(columns=str.upper)
语文数学英语PYTHONPYTHON_SCORE
悟空24.07531101及格
悟饭12.03211690及格
悟天NaN886345不及格
武神50.0414198及格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值