Pandas快捷教程 DataFrame

2021-07-09 02:39:02 字數 3991 閱讀 7890

pandas是python中非常重要的用於處理結構化資料的開源工具包,基於numpy實現了許多靈活、強大的高階工具。pandas提供的很多功能非常類似於excel,這一點大家可以在後續學習中慢慢體會。pandas的主要資料結構是series(一維資料)和dataframe(二維資料),並在此基礎上提供了諸如缺失值處理、插入、刪除、分組等非常豐富的api。

(清華大學出版社,2021)。本書系統地介紹統計分析和機器學習領域中最為重要和流行的多種技術及其基本原理,在詳解有關演算法的基礎上,結合大量python語言例項演示了這些理論在實踐中的使用方法。具體內容包括但不限於線性回歸(包括嶺回歸、lasso、彈性網路、ransac)、邏輯回歸、支援向量機、感知機與神經網路、聚類分析(包括k均值演算法、em演算法、密度聚類、譜聚類等)、降維與流形學習、整合學習、knn、樸素貝葉斯、概率圖模型(包括貝葉斯網路和hmm模型)等內容。

下面重新建立乙個名為pd_empty的空dataframe,然後逐行地向其中寫入資料:

如果需要指定列的順序,則可以使用columns屬性:

例如,下面的例子旨在判斷名叫『jack』的客戶是否存在。如果存在,則輸出其對應的年齡資訊。

if 'jack' in concat_result['name'].values:

print( concat_result.loc[(concat_result['name']=='jack')]['age'].values)

##等價於 print( concat_result[(concat_result['name']=='jack')]['age'].values)

else:

print("no such person.")

回到之前的pokemon資料,這裡還是列出開始的幾行:

下面**的作用是向dataframe中追加一列,而且這一列是若干列資料的加和:

df['total'] = df['hp'] + df['attack'] + df['defense'] + df['sp. atk'] + df['sp. def'] + df['speed']

##或者使用下面的**,二者具有相同的效果,注意4:10表示從第4列到第9列(即不含第10列)

#df['total'] = df.iloc[:, 4:10].sum(axis=1)

執行結果如下所示:

下面的**會把新追加的一列刪除:

df = df.drop(columns=['total'])
如果我們只需要用到原資料中的部分列(相當於只使用一部分屬性作為feature),可以用過列名來重新組織資料:

df1 = df[['name', 'hp', 'defense']]
便會得到下面的結果(注意限於篇幅這裡僅列出了前幾行):

可以把列名轉換成列表,那麼就可以使用索引切片的方法來選擇多列(而無需逐一寫下它們的列名)。另外,我們還可以調整原dataframe的結構,例如下面的**把最後一列資料調整到了指定的位置:

cols = list(df.columns)

df2 = df[cols[0:4] + [cols[-1]]+cols[4:11]]

由此得到的結果如下:

df.loc[df['type 1'] == "grass"]
df.loc[(df['type 1'] == "grass") & (df['type 2'] == "poison") & (df['hp'] > 70)]
注意,在需要兩個篩選條件同時滿足時,我們使用的是符號 &;如果滿足任乙個條件即可,那麼可以使用 | 。(這一點跟python中的常規習慣有點不同)

此外,上面這種篩選,並不會改變df本身。如果要記錄這個篩選後的結果,可以新建乙個dataframe,然後做賦值操作。

new_df = df.loc[(df['type 1'] == 'grass') & (df['type 2'] == 'poison') & (df['hp'] > 70)]
另外乙個問題是,把上述篩選後的dataframe輸出,你會發現由於部分行被丟掉了,導致新的索引就變得不是連續的:

new_df= new_df.reset_index(drop=true)
結果如下:

此外,你可能已經注意到了,這裡需要使用賦值來使得new_df的值被改變。另外乙個等價的方法是令inplace引數為true:

new_df.reset_index(drop=true, inplace=true)
上面的篩選中使用「==」或「>」,這些結果都是exact match的。一般對於字串型別的資料來說,還可以做模糊匹配。例如,要篩選所有name中包含有mega的資料:

df.loc[df['name'].str.contains('mega')]
如果要排除滿足條件的結果,則需要使用『~』符號,例如:

df.loc[~df['name'].str.contains('mega')]
甚至還可以使用正規表示式來做匹配(這裡不會對正規表示式做具體解釋),下面**中的flags=re.i表示忽略大小寫:

import re

df.loc[df['type 1'].str.contains('fire|grass', flags=re.i, regex=true)]

在對dataframe進行一頓操作之後,接下來就需要把它儲存起來,例如存成csv檔案,此時需要用到的api是to_csv()。例如:

df.to_csv('modified.csv')
通過對比之前我們讀入的檔案,不難發現,多出來一列索引:

如果不想要這列索引,那麼可以使用:

df.to_csv('modified.csv', index=false)

#儲存成其它檔案格式,例如excel檔案

#df.to_excel('modified.xlsx', index=false)

#定義不同的csv格式,例如使用'\t'作為分隔符

#df.to_csv('modified.txt', index=false, sep='\t')

【本文完】主成分分析(pca)與kernel pca

影象數學:主成分變換(pca)

pandas批量讀取csv生成dataframe

此方法用來將資料集合並 import pandas as pd import glob import os pathr r d xx xx 批量檔案所在路徑 file sorted glob.glob os.path.join pathr,csv key lambda name int name 8...

pandas使用教程

注意點 1.pandas的資料型別dataframe 和 series 2.pandas的plot方法影象視覺化 import matplotlib.pyplot as plt from pandas import dataframe,series series 4,5,7 plot plt.sho...

python 安裝pandas教程

python3 安裝pandas 如果使用python2需要安裝的話,可以用pip install pandas 如果使用python3需要安裝的話,可以用pip3 install pandas 會自動安裝依賴庫 呼叫包,看下是否安裝成功 python3 python 3.8 1 tags v3.8...