1.?刪除重復(fù)行
使用duplicated()函數(shù)檢測(cè)重復(fù)的行。
返回布爾類型的Series對(duì)象,每個(gè)元素對(duì)應(yīng)一行,如果該行不是第一次出現(xiàn),則元素為True。
def make_df(indexs, columns):
data = [[str(j)+str(i) for j in columns] for i in indexs]
df = pd.DataFrame(data=data, index=indexs, columns=columns)
return df
df = make_df([1, 2, 3, 4], list('ABCD'))
df
# 讓第一行和第二行重復(fù)
df.loc[1] = df.loc[2]
df
# 判斷是否和前面的行重復(fù)了
df.duplicated()
df.duplicated(keep='first') # 保留第一行
df.duplicated(keep='last') # 保留最后一行
df.duplicated(keep=False) # 標(biāo)記所有重復(fù)行,不保留任何一行
df.loc[1, 'D'] = 'DDD'
df
# subset: 子集
df.duplicated(subset=['A','B','C'])
?
?使用drop_duplicates()函數(shù)刪除重復(fù)的行:
print(df.drop_duplicates())
df.drop_duplicates(subset=['A', 'B', 'C'])
df.drop_duplicates(subset=['A', 'B', 'C'], keep='last')
?
2. 映射
映射的含義:創(chuàng)建一個(gè)映射關(guān)系列表,把values元素和一個(gè)特定的標(biāo)簽或者字符串綁定。
replace()函數(shù):替換元素
index = ['張三', '張三豐', '李白', '杜甫']
columns = ['Python', 'Java', 'H5', "UI"]
data = np.random.randint(0, 100, size=(4, 4))
df = pd.DataFrame(data=data, index=index, columns=columns)
df
# 替換元素
df.replace({5: 50, 1: 100})
map()函數(shù):新建一列,map()函數(shù)中可以使用lambda函數(shù),適合處理某一單獨(dú)的列
df2 = df.copy()
df2
# map一般用在Series數(shù)據(jù)結(jié)構(gòu),不能用于DataFrame
# df2['Python'].map({16: 160, 12: 120, 17: 170, 60:600})
# 將Python的每個(gè)人的成績(jī)乘以10
df2['Python'].map(lambda x : x * 10)
# 新增一列
df2['Pandas'] = df2['Python'].map(lambda x : x * 10)
df2
?
# 新增一列:判斷Java的成績(jī)是否及格
df2['Java是否及格'] = df2['Java'].map(lambda n: '及格' if n>=60 else '不及格')
df2
# 使用普通函數(shù)
# 新增一列: 判斷UI成績(jī)
# <60 不及格
# 60<=n <80 及格
# >=80 優(yōu)秀
def fn(n):
if n < 60:
return '不及格'
elif n < 80:
return '及格'
return '優(yōu)秀'
df2['UI等級(jí)'] = df2['UI'].map(fn)
df2
?
rename()函數(shù):替換索引。
df3.rename({'張三': 'Mr Zhang'}) # 默認(rèn)修改行索引名
df3.rename({'Python': '派森'}, axis=1) # 修改列索引名
df3.rename(index={'張三': 'Mr Zhang'}) # 修改行索引名
df3.rename(columns={'Python': '派森'}) # 修改列索引名
# 重置索引
df3.reset_index()
# 設(shè)置行索引
df3.set_index(keys=['H5'])
apply()函數(shù):既支持 Series,也支持 DataFrame
df = pd.DataFrame(data=np.random.randint(0, 10, size=(5, 3)),
index=list('ABCDE'),
columns=['Python', 'NumPy', 'Pandas']
)
df
# 用于Series, 其中x表式的Series中元素
df['Python'].apply(lambda x: True if x>5 else False)
# 用于DataFrame, 其中x是DataFrame中某列或某行的Series數(shù)據(jù)
df.apply(lambda x : x.mean(), axis=0) # 求每一列數(shù)據(jù)的平均值
df.apply(lambda x : x.mean(), axis=1) # 求每一行數(shù)據(jù)的平均值
?
# 自定義方法
def fn2(x):
return (np.round(x.mean(), 1), x.count()) # 平均值,計(jì)數(shù)
df.apply(fn2, axis=1)
# applymap: DataFrame專有的方法,其中的x是每個(gè)元素
df.applymap(lambda x : x + 100)
?
transform()函數(shù)
df = pd.DataFrame(data=np.random.randint(0, 10, size=(5, 3)),
index=list('ABCDE'),
columns=['Python', 'NumPy', 'Pandas']
)
df
# Series中使用transform
# 可以執(zhí)行多項(xiàng)計(jì)算
df['Python'].transform([np.sqrt, np.exp])
# DataFrame中使用transform
def convert(x):
if x.mean() > 5:
return x * 10
return x * (-10)
df.transform(convert) # 處理每一列
df.transform(convert, axis=1) # 處理每一行
?
3.?異常值檢測(cè)和過濾?
describe():查看每一列的描述性統(tǒng)計(jì)量
df.std():可以求得DataFrame對(duì)象每一列的標(biāo)準(zhǔn)差
df.drop():刪除特定索引
unique():唯一,去重,DataFrame沒有unique,Series調(diào)用unique。
df.query:按條件查詢
df2.drop('A') # 默認(rèn)刪除行
df2.drop('Python', axis=1) # 刪除列
df2.drop(index='A') # 刪除行
df2.drop(columns='Python') # 刪除列
# 刪除多列或多行
df2.drop(columns=['NumPy', 'Python'])
df2.drop(index=['A', 'B'], inplace=True)
df['Python'].unique()
# ==, >, <
# and, &
# or , |
# in
df.query('Python == 9') # 找到Python列中等于9的所有行
df.query('Python < 8')
df.query('Python>6 and NumPy==2')
df.query('Python>6 & NumPy==2')
df.query('Python==3 or NumPy==2')
df.query('Python==3 | NumPy==2')
df.query('Python in [3, 4, 5, 6]') # 成員運(yùn)算符
# 使用變量
n = 7
df.query('Python == @n') # @n 表式使用變量n的值
m = [3, 4, 5, 6]
df.query('Python in @m') # 成員運(yùn)算符
df.sort_values(): 根據(jù)值排序;
df.sort_index(): 根據(jù)索引排序。
# sort_values : 默認(rèn)按照列名排序,默認(rèn)升序 (常用)
df.sort_values('Python')
# ascending: 是否升序,默認(rèn)是True
df.sort_values('Python', ascending=False) # 降序
# 根據(jù)行索引名排序,會(huì)把列進(jìn)行排序(不常用)
df.sort_values('B', axis=1)
# 按照索引名排序 (不常用)
# 默認(rèn)是對(duì)行索引進(jìn)行排序,默認(rèn)是升序
df.sort_index(ascending=False)
# 按照列索引排序
df.sort_index(ascending=False, axis=1)
df.info(): 查看數(shù)據(jù)信息
df.info()
4. 抽樣?
使用.take()函數(shù)排序;可以借助np.random.permutation()函數(shù)隨機(jī)排序。
df2.take([1, 0, 2]) # 行排列
df2.take([1, 0, 2], axis=1) # 列排列
# 隨機(jī)排列
np.random.permutation([0, 1, 2])
# 無放回抽樣: 依次隨機(jī)取出,沒有重復(fù)值
df2.take(np.random.permutation([0, 1, 2]))
?
# 有放回抽樣: 可能會(huì)出現(xiàn)重復(fù)值
np.random.randint(0, 3, size=5)
df2.take(np.random.randint(0, 3, size=5))
?文章來源地址http://www.zghlxwxcb.cn/news/detail-485938.html
?文章來源:http://www.zghlxwxcb.cn/news/detail-485938.html
?
?
?
?
?
?
?
?
?
?
?
到了這里,關(guān)于pandas---刪除重復(fù)行、映射、異常值檢測(cè)與過濾、抽樣的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!