合并數(shù)據(jù)集
1.數(shù)據(jù)庫風(fēng)格的DataFrame合并:merge罩抗,join
pd.merge(df1, df2)
:
? on=['']拉庵,默認(rèn)將重疊列當(dāng)鍵(列名不同left_on, right_on)
? how='',默認(rèn)inner套蒂,也可'left', 'right'钞支,'outer'笛卡爾積
? suffixes=('_x', '_y'),重復(fù)列名時(shí)使用
? 其他參數(shù):
? left, right;
? left_index, right_index操刀,索引鍵連接True/False烁挟,索引上的合并
? sort=True排序,copy=True復(fù)制
df1.join(df2, how='outer')
:可合并多個(gè)待有相同索引的骨坑,左連接撼嗓,也可傳入一組dataframe
2.軸向連接:pd.concat
數(shù)組的連接函數(shù):np.concatenate([arr1, arr2], axis=1)
pd.concat([s1, s2, s3])
? axis=0,默認(rèn)0產(chǎn)生新的Series 欢唾,1時(shí)產(chǎn)生DataFrame
? join='outer'
? join_axes=[]:指定要合并索引值
? keys=[]:在連接后的結(jié)構(gòu)創(chuàng)建層次化索引索s引用且警,與result.unstack()
連用
? axis=1時(shí),keys就成為列頭
? 同樣邏輯使用dataframe礁遣,
? {'level 1': df1, 'level 2': df2}傳入字典:字典的鍵被當(dāng)之keys的值
? levels:外層級(jí)別的索引
? names[]:分層級(jí)別的名稱斑芜,管理層次化索引參數(shù)
? ignore_index=True,忽略索引
? verify_integrity=False
:默認(rèn)運(yùn)行重復(fù)
3.合并重疊數(shù)據(jù)np.where()
全部或部分重疊時(shí):np.where(pd.isnull(a), b, a)
Series的combine_first()同樣功能祟霍,自動(dòng)補(bǔ)齊:df1.combine_first(df2)
重塑和軸向旋轉(zhuǎn)
1.重塑層次化索引:stack
stack:將列轉(zhuǎn)化為行杏头,k可傳入指定列名,dropna=True默認(rèn)濾除缺失數(shù)據(jù)沸呐,(unstuck)
2.長(zhǎng)格式旋轉(zhuǎn)為寬格式:轉(zhuǎn)置:povit
povited=data.pivot('col1', 'col2', 'col3')
:參數(shù)value填充醇王,多個(gè)value參數(shù)層次化
? 快捷方式,相當(dāng)于set_index和unstack
數(shù)據(jù)轉(zhuǎn)換
1.移除重復(fù)數(shù)據(jù)
data.duplicated()
:檢查是否重行
data.drop_duplicates()
:去重行崭添,根據(jù)指定列傳入?yún)?shù)['key']
? take_last=False,默認(rèn)保留第一個(gè)
2.利用函數(shù)和映射:map
A_to_B = {'a' : 'b'}
# Series的map方法
data['B'] = data['A'].map(A_to_B)
# data['B'] = data['A'].map(lambda x: A_to_B[x])
3.值替換:replace
data.replace('要替換的值'寓娩,np.nan)
:替換成NaN,多個(gè)替換傳入[]呼渣,不同值的不同替換傳入{}
fillna作為特殊情況填充
4.重命名索引軸
data.index.map(str.upper/lower)
:僅改變大小寫
data.rename(index={}, columns={}, inplace=True)
:也可傳入屬性方法str.upper棘伴。inplace是否更改
5.離散化和面元?jiǎng)澐郑篶ut,qcut
cats = pd.cut(ages, [18, 25, 35, 50])
: 將年齡分組徙邻,返回的是所屬區(qū)間
參數(shù):right=False表示右開左閉
data = pd.cut(data, 4, precision=2)
:根據(jù)最值分為四組
屬性:
? cats.lables:所屬區(qū)間的序號(hào)
? cats.levels:所有區(qū)間
? pd.value_counts(cats):每個(gè)區(qū)間所含數(shù)量
data = pd.qcut(data, 4)
:按四分位數(shù)位數(shù)進(jìn)行分組排嫌,可傳入自定義分位數(shù)[0.1, 0.5, 0.9, 1.]
6.檢查和過濾異常值(離群值)
data[(np.abs(data) > 3).any(1)]
:在data中所有絕對(duì)值大于3的,返會(huì)True/False缰犁。
? any()全部為false時(shí)才返回false淳地。any(1)怖糊,axis=1。
data[(np.abs(data) > 3) = np.sign(data) * 3
:將數(shù)值設(shè)定在+-3之間
? np.sign()返回1和-1表示原始數(shù)據(jù)符號(hào)颇象。
7. 排列和隨機(jī)采樣:permutation
#shuffle直接改變?cè)獢?shù)據(jù)伍伤,permutation是返回不更改
sampler = np.random.permutation(5) # 隨機(jī)重排序
df.take(sampler)
# 隨機(jī)選取3個(gè)
df.take(np.random.permutation(len(df))[:3])
8.計(jì)算指標(biāo)/啞變量
將分類變量轉(zhuǎn)換為啞變量矩陣/指標(biāo)矩陣
pd.get_dummies(df['key'])
:key列包含n個(gè)不同的值,就派生n列
? prefix='前綴名'遣钳,加前綴名扰魂,前綴名_列名
字符串操作
字符串對(duì)象方法 | 說明 |
---|---|
split() | 拆分 |
strip(),rstrip蕴茴,lstrip | 去空格 |
'str'.join(obj) |
連接字符劝评,也可用+ |
in | 定位 |
count() | 計(jì)算次數(shù) |
replace() | 替換 |
endswith, startswith | 是否以''結(jié)尾或開始 |
join | 連接,作為分隔符 |
find | 查找(第一個(gè)位置) |
rfind | 查找(最后一個(gè)) |
index | 查找倦淀,返回所在位置蒋畜。(找不到會(huì)報(bào)錯(cuò)) |
lower,upper | |
ljust撞叽,rjust | 填充姻成,以符號(hào)最低寬帶。默認(rèn)空格 |
正則
raw string類型(不包含轉(zhuǎn)義符):r'text'
, r'[1-9]\d{5}'
re庫常用功能函數(shù) | 說明 |
---|---|
re.search() | 第一個(gè)位置愿棋,返回match對(duì)象(在一個(gè)字符串中) |
re.match() | 開始位置器匹配科展,返回match(在一個(gè)字符串中) |
re.findall() | 所有匹配的,列表返回全部字符串 |
re.split() | 按匹配結(jié)果分割糠雨,返回列表(在一個(gè)字符串中)<br />參數(shù)maxsplit=0最大分割數(shù) |
re.finditer() | 搜索字符串才睹,返回匹配結(jié)果的迭代,match對(duì)象 |
re.sub() | 替換见秤,(在一個(gè)字符串中)<br />參數(shù):repl:替換的砂竖,count=0幾次真椿。prt |
re.search(pattern, string, flags=0)
pattern正則鹃答,string目標(biāo),flags控制標(biāo)記
? flags標(biāo)記:re.i
, re.IGNORECASE
:忽略大小寫
? re.M
, re.MULTILINE
:^匹配每行開始
? re.S
, re.DOTALL
:. 匹配所有字符
re.compile(pattern, flags=0)
:字符串編譯成正則表達(dá)式
pandas中矢量化的字符串函數(shù)
pandas中矢量化的字符串函數(shù) | 說明 |
---|---|
cat | 連接突硝,元素級(jí) |
contains | 包含 |
count | 計(jì)數(shù) |
replace() | 替換 |
endswith, startswith | 是否以''結(jié)尾或開始 |
findall | 查找(所有) |
get | 獲取第i個(gè)元素 |
join | 連接测摔,作為分隔符 |
len | 長(zhǎng)度 |
lower,upper | |
match | re.match |
pad | 添加空白符 |
center | =pad(side='both') |
repeat | 重復(fù) |
slice | 對(duì)Series這的各個(gè)字符串進(jìn)行截取 |
split | 分隔 |
strip()解恰,rstrip锋八,lstrip | 去空格 |