重复元素处理
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
| 语文 | 数学 | 英语 |
---|
悟空 | 24 | 75 | 31 |
---|
悟饭 | 12 | 32 | 116 |
---|
悟天 | 50 | 41 | 41 |
---|
武神 | 50 | 41 | 41 |
---|
duplicated()
- subset: 可选参数,用于指定要检查重复的列名列表。默认为 None,表示检查所有列。
- keep: 可选参数,表示如何处理重复值。
keep=‘first’(默认值):保留第一次出现的值,将后续重复值标记为 True。
keep=‘last’:保留最后一次出现的值,将前面的重复值标记为 True。
keep=False:将所有重复值标记为 True。
df.duplicated(keep=False)
"""
悟空 False
悟饭 False
悟天 True
武神 True
dtype: bool
"""
df.duplicated()
"""
悟空 False
悟饭 False
悟天 False
武神 True
dtype: bool
"""
~df.duplicated()
"""
悟空 True
悟饭 True
悟天 True
武神 False
dtype: bool
"""
df.loc[~df.duplicated()]
| 语文 | 数学 | 英语 |
---|
悟空 | 24 | 75 | 31 |
---|
悟饭 | 12 | 32 | 116 |
---|
悟天 | 50 | 41 | 41 |
---|
元素映射
replace()函数:替换元素
- to_replace: 要替换的值,可以是单个值、列表、字典或者 Series。
- value: 替换的新值,可以是单个值或者列表。
- inplace: 可选参数,默认为 False。如果设置为 True,则在原始 DataFrame 上进行替换,否则返回一个新的 DataFrame。
- limit: 可选参数,用于限制替换的数量。
df
| 语文 | 数学 | 英语 |
---|
悟空 | 24 | 75 | 31 |
---|
悟饭 | 12 | 32 | 116 |
---|
悟天 | 50 | 41 | 41 |
---|
武神 | 50 | 41 | 41 |
---|
df.loc['悟天', '数学'] = 88
df.loc['悟天', '英语'] = 63
df.loc['悟天', '语文'] = np.nan
df
| 语文 | 数学 | 英语 |
---|
悟空 | 24.0 | 75 | 31 |
---|
悟饭 | 12.0 | 32 | 116 |
---|
悟天 | NaN | 88 | 63 |
---|
武神 | 50.0 | 41 | 41 |
---|
mapping = {40: 55, 68: 29, 15: 118, np.nan: 0}
df.replace(mapping)
| 语文 | 数学 | 英语 |
---|
悟空 | 24.0 | 75 | 31 |
---|
悟饭 | 12.0 | 32 | 116 |
---|
悟天 | 0.0 | 88 | 63 |
---|
武神 | 50.0 | 41 | 41 |
---|
map()函数:新建一列
使用map()函数,由已有的列生成一个新列;适合处理某一单独的列。
mapping = {31: 111, 116: 100, 63: 55, 41: 108}
df['python'] = df['英语'].map(mapping)
df
| 语文 | 数学 | 英语 | python |
---|
悟空 | 24.0 | 75 | 31 | 111 |
---|
悟饭 | 12.0 | 32 | 116 | 100 |
---|
悟天 | NaN | 88 | 63 | 55 |
---|
武神 | 50.0 | 41 | 41 | 108 |
---|
df['python'] = df['python'].map(lambda score: score - 10)
df
| 语文 | 数学 | 英语 | python |
---|
悟空 | 24.0 | 75 | 31 | 101 |
---|
悟饭 | 12.0 | 32 | 116 | 90 |
---|
悟天 | NaN | 88 | 63 | 45 |
---|
武神 | 50.0 | 41 | 41 | 98 |
---|
def convert(score):
if score >= 120:
return '优秀'
elif 120 > score >= 90:
return '及格'
else:
return '不及格'
df['python_score'] = df['python'].map(convert)
df
| 语文 | 数学 | 英语 | python | python_score |
---|
悟空 | 24.0 | 75 | 31 | 101 | 及格 |
---|
悟饭 | 12.0 | 32 | 116 | 90 | 及格 |
---|
悟天 | NaN | 88 | 63 | 45 | 不及格 |
---|
武神 | 50.0 | 41 | 41 | 98 | 及格 |
---|
rename()函数:替换索引
- mapper: 可以是字典、函数或者 Series。用于指定新的行索引或列标签。
- index: 可选参数,用于指定是否重命名行索引,默认为 True。
- columns: 可选参数,用于指定是否重命名列标签,默认为 False。
- axis: 可选参数,用于指定重命名的方向,0 表示行索引,1 表示列标签。
- inplace: 可选参数,默认为 False。如果设置为 True,则在原始 DataFrame 上进行重命名,否则返回一个新的 DataFrame。
rename 专门操作索引的;对索引进行重命名.
df
| 语文 | 数学 | 英语 | python | python_score |
---|
悟空 | 24.0 | 75 | 31 | 101 | 及格 |
---|
悟饭 | 12.0 | 32 | 116 | 90 | 及格 |
---|
悟天 | NaN | 88 | 63 | 45 | 不及格 |
---|
武神 | 50.0 | 41 | 41 | 98 | 及格 |
---|
df.rename(columns={'英语': '物理', 'python_score': 'python及格线'})
| 语文 | 数学 | 物理 | python | python及格线 |
---|
悟空 | 24.0 | 75 | 31 | 101 | 及格 |
---|
悟饭 | 12.0 | 32 | 116 | 90 | 及格 |
---|
悟天 | NaN | 88 | 63 | 45 | 不及格 |
---|
武神 | 50.0 | 41 | 41 | 98 | 及格 |
---|
df.rename(index={'悟天': 'wutian', '武神': 'wuwshen'})
| 语文 | 数学 | 英语 | python | python_score |
---|
悟空 | 24.0 | 75 | 31 | 101 | 及格 |
---|
悟饭 | 12.0 | 32 | 116 | 90 | 及格 |
---|
wutian | NaN | 88 | 63 | 45 | 不及格 |
---|
wuwshen | 50.0 | 41 | 41 | 98 | 及格 |
---|
df.rename(columns=str.upper)
| 语文 | 数学 | 英语 | PYTHON | PYTHON_SCORE |
---|
悟空 | 24.0 | 75 | 31 | 101 | 及格 |
---|
悟饭 | 12.0 | 32 | 116 | 90 | 及格 |
---|
悟天 | NaN | 88 | 63 | 45 | 不及格 |
---|
武神 | 50.0 | 41 | 41 | 98 | 及格 |
---|