Python 數據轉換融合

1 數據合并

  • 軸向連接 pd.concat()
  1. 沿縱向軸合并:axis=0
  2. 沿橫向軸合并:axis=1
frames = [df1, df2]
pd.concat(frames) #上下連接
#pd.concat(frames, axis=1) 左右連接
pd.concat(frames, axis=1, keys=['df1', 'df2']) # 層次化索引
pd.concat(frames, axis=1, join='inner') # 0軸索引取交集
pd.concat(frames, axis=1, join_axes=[df1.index]) #只用原始索引
常用的參數
  • 通過join_axes指定其他州的索引扮超,不進行交并運算璧疗。

2 數據融合技術

2.1 使用pd.merge()


  • 默認將重合列作為鍵,也可以通過參數on指定矢炼。
  • 通過參數how指定融合方式(left系瓢,right,inner句灌,outer)
  • 融合指標變量indicator夷陋,默認為False,如果設為True胰锌,則增加_merge(取值為left_only,right_only资昧,both)∨捣玻可以設為一個字符串表示列名践惑。
  • 指定左鍵和右鍵:left_on,right_on
  • 融合后相同名稱列默認會產生后綴尔觉,可以使用suffixes來利用原列名及后綴產生新的列名。
  • 索引-列合并
pd.merge(left, right, left_index= True, right_on='...', how='outer')

2.2 使用join融合

left.join(right, how='outer')

join默認融合方法how='left'

  • 索引-列融合
#這兩個方法是等價的
left.join(right, on=key_or_keys)
pd.merge(left, right, left_on=key_or_keys, right_index=True,how='left', sort=False)

2.3 combine_first 缺失值填補

-用df1的值來填補df2

df2.combine_first(df1)

3 排序和隨機采樣

df.sort_values('loan_amnt')
df.sort_index()
  • 默認ascending=True专甩,若改為False則為降序。
  • 如果不是順序或降序涤躲,想要重排:
  1. 先通過np.random.permutation產生重排后的數組
  2. 再用.iloc或take函數
sampler = np.random.permutation(10)
df.take(sampler)
df.take(np.random.permutation(3)) # 0,1,2的重排
df.sample(3) #任意三個

4 離散化及面元劃分

  • cut()和qcut()函數
  • cut():等距離散化
bins = [0, 10000, 20000, 30000, 40000]
pd.cut(df['loan_amnt'], bins)
#添加標簽
labels = ['A', 'B', 'C', 'D']
pd.cut(df['loan_amnt'], bins=bins, labels=labels)
  • qcut():等頻離散化
cats = pd.qcut(df['loan_amnt’], 5)
cats.value_counts()

實際每個區(qū)間的數量并不一定是理想中的等量

5 數據轉換

  • map()函數
df['loan_status'].map(str.title) # 產生了一個新的Series對象
df['loan_status'] = df['loan_status'].map(str.title) #替換原來的數據
# 利用字典
mapper = {‘Fully Paid’:0, 'Charged Off':1}
df['indicator'] = df['loan_status'].map(mapper)
  • 替換值使用replace()
df.replace('10+ years', 'high')
# 多個种樱,用列表
df.replace(['10+ years', '4 years', '< 1 year'], [10, 4, 1])
#也可以用字典
mapper = {'10+ years':10, '4 years’:4, '< 1 year’:1}
df.replace(mapper) # 等價于map:df['emp_length'].map(mapper)
# 重命名索引
df.columns
df.columns.map(str.upper)
df.columns = df.columns.map(str.upper)
  • 啞變量編碼get_dumies()
pd.get_dummies(df['home_ownership'])
dummies = pd.get_dummies(df['home_ownership'], prefix='home') #指定前綴
df[['loan_amnt','grade']].join(dummies)  # 和原數據合并
pd.get_dummies(df) #DF對象亦可
pd.get_dummies(df, columns=['home_ownership'])
pd.get_dummies(df, columns=['home_ownership'], drop_first=True) # 去掉第一個編碼特征

6 文本數據規(guī)整

s.str.lower()
df.columns.str.lower()
df.columns.str.lower().str.replace(' ', '_')
  • 分割元素
  1. 在str上使用索引
s = pd.Series(['name1 age1 sex1', 'name2 age2 sex2', 'name3 age3 sex3'])
s.str.split(" ").str[0]
  1. 使用str.get()
s.str.split(" ").str.get(0)
s.str.split(" ", expand=True) # 展開成DF
  1. 結合正則表達式
s.str.contains(r'\d')
s.str.replace(r'\d.', 'XX')
s.str.findall(r'\d.').str.get(0)
s.str.extract(r'(\d.)', expand=False)
s.str.get_dummies(sep=',')

(根據《Python數據分析基礎》整理)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末嫩挤,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子岂昭,更是在濱河造成了極大的恐慌,老刑警劉巖约啊,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異无宿,居然都是意外死亡枢里,警方通過查閱死者的電腦和手機蹂午,發(fā)現死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來豆胸,“玉大人,你說我怎么就攤上這事晚胡。” “怎么了瓷患?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵遣妥,是天一觀的道長。 經常有香客問我,道長爱态,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任俭识,我火速辦了婚禮,結果婚禮上套媚,老公的妹妹穿的比我還像新娘痘煤。我一直安慰自己,他們只是感情好衷快,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著师郑,像睡著了一般调窍。 火紅的嫁衣襯著肌膚如雪宝冕。 梳的紋絲不亂的頭發(fā)上邓萨,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音缔恳,去河邊找鬼。 笑死歉甚,一個胖子當著我的面吹牛,可吹牛的內容都是我干的纸泄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼雪营,長吁一口氣:“原來是場噩夢啊……” “哼衡便!你這毒婦竟也來了卓缰?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤捌显,失蹤者是張志新(化名)和其女友劉穎总寒,沒想到半個月后扶歪,有當地人在樹林里發(fā)現了一具尸體摄闸,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年炫欺,在試婚紗的時候發(fā)現自己被綠了熏兄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片品洛。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡桥状,死狀恐怖,靈堂內的尸體忽然破棺而出辅斟,到底是詐尸還是另有隱情芦拿,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布蔗崎,位于F島的核電站酵幕,受9級特大地震影響蚁趁,放射性物質發(fā)生泄漏。R本人自食惡果不足惜他嫡,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一庐完、第九天 我趴在偏房一處隱蔽的房頂上張望钢属。 院中可真熱鬧,春花似錦淆党、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽台颠。三九已至,卻和暖如春串前,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背实蔽。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工局装, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贼邓。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓阶冈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親女坑。 傳聞我的和親對象是個殘疾皇子统舀,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容