【Python基础】Pandas笔记---通过比赛整理出的10条Pandas实用技巧
點擊上方“潛心的Python小屋”關(guān)注我們,第一時間推送優(yōu)質(zhì)文章。
前言
大家好,我是潛心。最近還在參加某比賽,將pandas對數(shù)據(jù)預(yù)處理的方法進行了總結(jié),以下列出的10條是我覺得比較常用、好用的處理操作。
本文約3k字,預(yù)計閱讀15分鐘。
1. 連接Pandas對象---concat()
concat方法是沿著某條軸,將多個DataFrame/Series對象進行連接在一起。
主要用途:?對某些對象只進行簡單的行連接或列連接。
def?concat(objs,?axis=0,?join="outer",?ignore_index:?bool?=?False,?keys=None,?levels=None,?names=None,?verify_integrity:?bool?=?False,?copy:?bool?=?True)?主要參數(shù)介紹:
objs:多個對象;
axis:指定連接的軸,0(行)或1(列);
join:連接的方式,outer(外連接)或inter(內(nèi)連接);
ingnore_index:是否重建索引;
例:
In[1]:?df1?=?pd.DataFrame(np.random.randint(10,?size=(3,?3)),?columns=['A',?'B',?'C'])A?B?C 0?1?4?8 1?8?8?4 2?0?9?3In[2]:?df2?=?pd.DataFrame(np.random.randint(10,?size=(2,?2)),?columns=['A',?'B'])A?B 0?3?9 1?8?6In[3]:?pd.concat([df1,?df2],?axis=0,?join='outer')A?B?C 0?1?4?8.0 1?8?8?4.0 2?0?9?3.0 0?3?9?NaN 1?8?6?NaNIn[4]:?pd.concat([df1,?df2],?axis=0,?join='inner',?ignore_index=True)A?B 0?1?4 1?8?8 2?0?9 3?3?9 4?8?6In[5]:?pd.concat([df1,?df2],?axis=1,?join='outer')A?B?C?A?B 0?1?4?8?3.0?9.0 1?8?8?4?8.0?6.0 2?0?9?3?NaN?NaN2. 合并Pandas對象---merge()
類似于關(guān)系數(shù)據(jù)庫的連接方式,根據(jù)一個或多個鍵(即列)將不同的DataFrame連接起來。
主要用途:對于擁有相同的鍵的兩個DataFrame對象,需要將其進行有效的拼接,整合到一個對象。
def?merge(left,?right,?how='inner',?on=None,?left_on=None,?right_on=None,left_index=False,?right_index=False,?sort=True,suffixes=('_x',?'_y'),?copy=True,?indicator=False,validate=None)主要參數(shù)介紹:
left:DataFrame對象;
right:DataFrame對象;
how:連接方式,inner或outer;
on:指定用于連接的鍵,必須存在于左右兩個DataFrame中;
left_on:左側(cè)DataFrame中用于連接鍵的列名,當(dāng)左右對象列名不同但含義相同時使用;
right_on:右側(cè)DataFrame中用于連接鍵的列名;
left_index:使用左側(cè)DataFrame的行索引作為連接鍵(配合right_on);
right_index:使用右側(cè)DataFrame的行索引作為連接鍵(配合left_on);
sort:對其按照連接鍵進行排序;
例:
In[6]:?pd.merge(df1,?df2,?how='inner',?on='A')A?B_x?C?B_y 0?8?8?4?6In[7]:?pd.merge(df1,?df2,?how='outer',?on='B')A_x?B?C?A_y 0?1.0?4?8.0?NaN 1?8.0?8?4.0?NaN 2?0.0?9?3.0?3.0 3?NaN?6?NaN?8.0In[8]:?pd.merge(df1,?df2,?how='outer',?left_on='B',?right_on='A')A_x?B_x?C?A_y?B_y 0?1.0?4.0?8.0?NaN?NaN 1?8.0?8.0?4.0?8.0?6.0 2?0.0?9.0?3.0?NaN?NaN 3?NaN?NaN?NaN?3.0?9.03. 刪除重復(fù)項---drop_duplicates()
刪除對象DataFrame中重復(fù)的行,重復(fù)通過參數(shù)subset指定。
主要用途:統(tǒng)計對象中不重復(fù)的個數(shù);
def?drop_duplicates(subset=None,?keep='first',?inplace=False,?ignore_index=False)主要參數(shù)介紹:
subset:指定的鍵(列),默認為所有的列(即每行全部相同);
keep:刪除重復(fù)項,除了第1個(first)或者最后一個(last);
inplace:是否直接對原來的對象進行修改,默認為False,生成一個拷貝;
ignore_index:是否重建索引;
例:
df1A?B?C 0?3?2?4 1?6?4?2 2?3?4?3 3?3?7?0 4?5?1?6 5?6?1?4In[9]:?df1.drop_duplicates('A')A?B?C 0?3?2?4 1?6?4?2 4?5?1?64. Series中的去重---unique()
相比于drop_duplicates方法,unique()只針對于Series對象,類似于Set。
主要用途:?通常是對DataFrame中提取某一鍵,變成Series,再去重,統(tǒng)計個數(shù)。
Series.unique()例:
In[10]:?len(df1['A'].unique().tolist())35. 排序---sort_values()
按照某個鍵進行排序。
主要用途:查看相同鍵時行的某些變化,如例子中在A相同時B、C的變化。
def?sort_values(by,?axis=0,?ascending=True,?kind='quicksort',?na_position='last',?ignore_index=False)主要參數(shù)介紹:
by:字符串或字符串列表,指定按照哪個鍵/索引進行排序;
axis:指定排序的軸;
ascending:升序或降序,默認為升序;
kind:指定排序方法,‘quicksort’, ‘mergesort’, ‘heapsort;
ignore_index:是否重建索引;
例:
In[11]:?df1.sort_values(by='A')A?B?C 0?3?2?4 2?3?4?3 3?3?7?0 4?5?1?6 1?6?4?2 5?6?1?46. 采樣---sample()
對對象進行采樣。
主要用途:?當(dāng)DataFrame對象數(shù)據(jù)量太大,導(dǎo)致做實驗過滿時,可以抽取一部分進行實驗,提高效率。
def?sample(n=None,?frac=None,?replace=False,?weights=None,?random_state=None,?axis=None)主要參數(shù)介紹:
n:指定采樣的數(shù)量;
frac:指定采樣的比例,與n只能選擇其中一個;
replace:允許或不允許對同一行進行多次采樣;
weights:采樣的權(quán)重,默認為“None”將導(dǎo)致相同的概率權(quán)重;
random_state:類似于seed作用;
axis:指定采樣的軸,默認為行;
例:
In[12]:?df1.sample(n=3)A?B?C 0?3?2?4 3?3?7?0 1?6?4?2In[13]:?df1.sample(frac=0.1)A?B?C 1?6?4?27. 對象分組---groupby()
groupby方法是對對數(shù)據(jù)內(nèi)部進行分組處理。
主要用途:?在數(shù)據(jù)挖掘中主要用在了Word2vec中,例如對每個用戶的行為進行分組,形成多個句子。
直觀理解:
def?groupby(by=None,?axis=0,?level=None,?as_index=True,?sort=True,?group_keys=True,?squeeze=False,?observed=False)主要參數(shù)介紹:
by:用于確定groupby的組;
axis:指定軸;
例(以下是最近構(gòu)造的Word2vec中的句子):
groups?=?df_log.groupby(['user_id']) df_log['creative_id']?=?df_log['creative_id'].astype('str') print('starting....') sentences?=?[groups.get_group(g)['creative_id'].tolist()?for?g?in?groups.groups]8. 判斷與刪除缺失值NaN---isna()、isnull()和dropna()
isna方法返回一個布爾對象,每個元素是否為NaN。
例:
df1A?B?C 0?1.0?2?3 1?NaN?5?6In[14]:?df1.isna()A???B???C 0?False?False?False 1?True?False?False當(dāng)數(shù)據(jù)量很大時,上述很難觀察到某列是否存在缺失,此時可以用isnull()方法
In[15]:?df1.isnull().all()??#?某列是否全部為NaNA????False B????False C????False dtype:?boolIn[16]:?df1.isnull().any()?#?某列是否出現(xiàn)NaNA?????True B????False C????False dtype:?booldropna方法刪除含缺失值的行或列。
def?dropna(axis=0,?how='any',?thresh=None,?subset=None,?inplace=False)主要參數(shù)介紹:
axis:指定軸;
how:參數(shù)為any時,行或列(axis決定)出現(xiàn)NaN時,就進行刪除;為all時,行或列全為NaN時才進行刪除;
thresh:閾值,要求不為NAN的個數(shù);
subset:指定鍵(列)進行判斷NAN刪除;
inplace:是否更改原對象;
例:
In[17]:?df1.dropna(how='any')A?B?C 0??1?2?3In[18]:?df1.dropna(how='any',?subset=['B'])A??B?C 0?1??2?3 1?NaN?5?69. 篩選或刪除特定值的行---isin()
判斷對象中是否存在某個值(列表、Series或DataFrame)。
主要用途:?當(dāng)缺失值不為NaN時,例如缺失值是一個字符串“\N“(比賽中碰到了),要想更改或刪除,則用isin方法較為方便,通過加負號想刪除符合條件的行,不寫負號是篩選出符合條件的行。
def?isin(values)values:需要判斷的值列表(不能為單個數(shù)值或字符串),可以為一個Series,或DataFrame(當(dāng)對象為DataFrame);
例(刪除包含某字符串的行):
df1A?B?C 0?1?2?3 1?4?\N?6 2?7?8?9In[19]:?df1[-df1.B.isin(['\\N'])]A?B?C 0?1?2?3 2?7?8?9篩選過程中,isin()方法只能判斷包含,布爾方法則可以進行更豐富的篩選:
df1?A?B?C 0?3?4?2 1?0?5?4 2?0?7?5 3?3?2?5 4?2?0?0 5?5?3?7In[20]:?df1[df1.A?>?2]A?B?C 0?3?4?2 3?3?2?5 5?5?3?7?10. 值替換---where()
通過布爾序列選擇一個返回的子集。
主要用途:?對對象進行篩選,并且對于不滿足的值,where方法可以對其進行替換。例如若列為性別,元素為字符串,可將其進行替換為數(shù)值。
例:
df1A?B?C 0?5?7?4 1?2?0?5 2?4?2?4 3?2?6?2 4?5?1?6 5?3?3?4In[21]:?df1.where(df1?>?3,?-1)A???B???C 0?5???7??4 1?-1??-1?5 2?4???-1?4 3?-1??6???-1 4?5???-1?6 5?-1??-1?4關(guān)于值替換,還可以用如下布爾判斷方法:
In[22]:?df1[df1.A?<=?3]?=?-1A???B???C 0?5???7??4 1?-1??0??5 2?4???2??4 3?-1??6???2 4?5???1??6 5?-1??3??4注意:?where()方法是對不滿足的進行替換,上述方法是對滿足條件的進行替換
總結(jié)
果然真正的打比賽才能發(fā)現(xiàn)有那么多知識已經(jīng)遺忘,記得及時整理才能方便以后進行鞏固。
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機器學(xué)習(xí)在線手冊深度學(xué)習(xí)筆記專輯《統(tǒng)計學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯獲取一折本站知識星球優(yōu)惠券,復(fù)制鏈接直接打開:https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群請掃碼進群(如果是博士或者準(zhǔn)備讀博士請說明):總結(jié)
以上是生活随笔為你收集整理的【Python基础】Pandas笔记---通过比赛整理出的10条Pandas实用技巧的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python基础】Pandas笔记--
- 下一篇: 【数学基础】一份非常适合人工智能学习的高