Pandas常見用法總結

關鍵縮寫和包導入

在這個速查手冊中,我們使用如下縮寫:

df:任意的Pandas DataFrame對象

s:任意的Pandas Series對象

raw:行標簽

col:列標簽

引入響應模塊:

import pandas?aspd

import numpy?asnp

導入數據

pd.read_csv(filename_path):從CSV文件導入數據

pd.read_table(filename_path):從限定分隔符的文本文件導入數據

pd.read_excel(filename_path):從Excel文件導入數據

pd.read_sql(query, connection_object):從SQL表/庫導入數據

pd.read_json(json_string):從JSON格式的字符串導入數據

pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格

pd.read_clipboard():從你的粘貼板獲取內容,并傳給read_table()

pd.DataFrame(dict):從字典對象導入數據,Key是列名,Value是數據

pd.read_excel(io, sheetname=0, header=0, skiprows=None, skip_footer=0, index_col=None, names=None, parse_cols=None, parse_dates=False, date_parser=None, na_values=None, thousands=None, convert_float=True, has_index_names=None, converters=None, dtype=None, true_values=None, false_values=None, engine=None, squeeze=False,?**kwds)

該函數主要的參數為:io、sheetname、header、names、encoding。

io?: excel文件,可以是文件路徑、文件網址、file-like對象、xlrd workbook;

sheet_name?: 返回指定的sheet,參數可以是字符串(sheet名)、整型(sheet索引)、list(元素為字符串和整型,返回字典{'key':'sheet'})、none(返回字典,全部sheet);

header:指定數據表的表頭,參數可以是int、list of ints,即為索引行數為表頭;

names:返回指定name的列,參數為array-like對象。

encoding:關鍵字參數,指定以何種編碼讀取。

? ? ? ?該函數返回pandas中的DataFrame或dict of DataFrame對象,利用DataFrame的相關操作即可讀取相應的數據。

pd.read_table(r'E:\test.txt', sep=' ',index_col=0)

常用參數:

?????header=None:沒有每列的column name,可以自己設定

?????encoding='gb2312':其他編碼中文顯示錯誤

?????index_col=0:設置第1列數據作為index

?????sep:設置分隔符'''

導出數據

df.to_csv(filename_path):導出數據到CSV文件

df.to_excel(filename_path):導出數據到Excel文件

df.to_sql(table_name, connection_object):導出數據到SQL表

df.to_json(filename_path):以Json格式導出數據到文本文件

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, encoding=None, inf_rep='inf', verbose=True, freeze_panes=None)

該函數主要參數為:excel_writer。

excel_writer:寫入的目標excel文件,可以是文件路徑、ExcelWriter對象;

sheet_name:被寫入的sheet名稱,string類型,默認為'sheet1';

na_rep:缺失值表示,string類型;

header:是否寫表頭信息,布爾或listof string類型,默認為True;

index:是否寫行號,布爾類型,默認為True;

encoding:指定寫入編碼,string類型。

創建測試對象

pd.DataFrame(np.random.rand(20,5)):創建20行5列的隨機數組成的DataFrame對象

pd.Series(my_list):從可迭代對象my_list創建一個Series對象

df.index = pd.date_range('1900/1/30', periods=df.shape[0]):增加一個日期索引

查看、檢查數據

df.head(n):查看DataFrame對象的前n行(不加參數,默認前10行)

df.tail(n):查看DataFrame對象的最后n行(不加參數,默認后10行)

df.shape():查看行數和列數(維度查看)

http://df.info()df.info-df.infodfdf.info():查看索引、數據類型和內存信息

df.describe():查看數值型列的匯總統計

s.value_counts(dropna=False):查看Series對象的唯一值和計數

df.apply(pd.Series.value_counts):查看DataFrame對象中每一列的唯一值和計數

df.dtypes:查看每一列的數據類型(擴展:df['two'].dtypes,查看“two”列的類型)

df.isnull():查看空置(注:空置部分會用true顯示,不是空置False顯示)(擴展:df['two'].isnull,查看“two”這一列的空置)

df.values:查看數據表的值

df.columns:查看列名稱

數據選取

df.isin([5]):判斷全部數據值中是否有5

dr[col].isin([5]):判斷列col中是否有5

df[col]:根據列名,并以Series的形式返回列

df[[col1, col2]]:以DataFrame形式返回多列

s.iloc[0]:按位置選取行數據

s.loc['index_one']:按索引選取行數據

df.iloc[0,:]:返回第一行

df.iloc[0,0]:返回第一列的第一個元素

df.ix[0] 或 df.ix[raw] :ix函數可以根據行位置或行標簽選擇行數據

?注:loc函數根據行標簽進行行選擇;

???????? iloc函數根據行位置進行行選擇;

???????? ix函數可以根據行位置選擇也可以根據行標簽選擇。

數據清理

df.columns = ['a','b','c']:重命名列名

pd.isnull():檢查DataFrame對象中的空值,并返回一個Boolean數組

pd.notnull():檢查DataFrame對象中的非空值,并返回一個Boolean數組

df.dropna():刪除所有包含空值的行

df.dropna(axis=1):刪除所有包含空值的列

df.dropna(axis=1,thresh=n):刪除所有小于n個非空值的行

df.fillna(x):用x替換DataFrame對象中所有的空值(注:fillna()會填充nan數據,返回填充后的結果。如果希望在原DataFrame中修改,則把inplace設置為True。如,df.fillna(0,inplace=True))

s.astype(float):將Series中的數據類型更改為float類型

df[col].astype(float):將DataFrame某列數據類型改為float類型

s.replace(1,'first'):用‘first’代替所有等于1的值(替換的是值,不是列名也不是索引名)

s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3

df[col].replace(1,1.0,inplace=True):列col中的值1用1.0替換

df.replace([1,3],['one','three'])

df.rename(columns=lambda x: x + 1):批量更改列名

df.rename(columns={'old_name': 'new_ name'}):選擇性更改列名

df.set_index('column_one'):將column_one這一列變為索引列

df.rename(index=lambda x: x + 1):批量重命名索引

df[col]=df[col].str.upper()或df[col].str.lower():基于列的大小寫轉換

df[col]=df[col].map(str.strip):清除某列的空格

df.drop_duplicates(subset=col,keep='fisrt',inplace=Flase):刪除重復值

注:這個drop_duplicate方法是對DataFrame格式的數據,去除特定列下面的重復行。返回DataFrame格式的數據。

subset : column label or sequence of labels, optional????? 用來指定特定的列,默認所有列

keep : {‘first’, ‘last’, False}, default ‘first’????? 刪除重復項并保留第一次出現的項

inplace : boolean, default False??????? 是直接在原來數據上修改還是保留一個副本


數據處理:Filter、Sort和GroupBy

df[df[col] > 0.5]:選擇col列的值大于0.5的行

df.sort_values(col1):按照列col1排序數據,默認升序排列

df.sort_values(col2, ascending=False):按照列col1降序排列數據

df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列數據

df.groupby(col):返回一個按列col進行分組的Groupby對象

df.groupby([col1,col2]):返回一個按多列進行分組的Groupby對象

df.groupby(col1)[col2]:返回按列col1進行分組后,列col2的均值

df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):創建一個按列col1進行分組,并計算col2和col3的最大值的數據透視表

df.groupby(col1).agg(np.mean):返回按列col1分組的所有列的均值

data.apply(np.mean):對DataFrame中的每一列應用函數np.mean

data.apply(np.max,axis=1):對DataFrame中的每一行應用函數np.max

df.isin

數據合并

df1.append(df2):將df2中的行添加到df1的尾部

df.concat([df1, df2],axis=1):將df2中的列添加到df1的尾部

df1.join(df2,on=col1,how='inner'):對df1的列和df2的列執行SQL形式的join

數據統計

df.describe():查看數據值列的匯總統計

df.mean():返回所有列的均值

df.corr():返回列與列之間的相關系數

df.count():返回每一列中的非空值(NaN)的個數

df.max():返回每一列的最大值

df.min():返回每一列的最小值

df.median():返回每一列的中位數

df.std():返回每一列的標準差

df.sum():返回所有行的和

?附加:

1.字典內嵌列表

importpandas as pd

data?={'Name':['Tom',?'Jack',?'Steve',?'Ricky'],'Age':[28,34,29,42]}

df?=pd.DataFrame(data)

printdf

輸出:

??????Age????? Name

028????Tom

134????Jack

229????Steve

342????Ricky

2.列表內嵌字典

列表內嵌字典,字典的鍵默認為列名。

importpandas as pd

data?=[{'a':?1,?'b':?2},{'a':?5,?'b':?10,?'c':?20}]

df?=pd.DataFrame(data)

printdf

輸出:

????a??? b????? c

0? 1? ? ?2? ? ?NaN

1? ?5? ?10? ? 20.0

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容