Python模块之Pandas模块学习笔记
目錄
一、模塊的安裝
二、數(shù)據(jù)結(jié)構(gòu)
1. DataFrame的創(chuàng)建
2. DataFrame索引的修改
3. DataFrame數(shù)據(jù)信息查看
三、文件的讀取和寫入
1. 讀取
2. 寫入
四、 數(shù)據(jù)的選取和處理
1. 數(shù)據(jù)的選取
2. 數(shù)據(jù)的處理
3. 數(shù)據(jù)的拼接(增加行、列)
4. 數(shù)據(jù)的統(tǒng)計分析
5. 數(shù)據(jù)的匯總? ?
一、模塊的安裝
1. 安裝pandas
pip instal pandas
2. 安裝openpyxl
pip instal openpyxl
二、數(shù)據(jù)結(jié)構(gòu)
pandas模塊更擅長處理二維數(shù)據(jù),主要有series和dataframe兩種數(shù)據(jù)結(jié)構(gòu)。
series創(chuàng)建一維數(shù)組,不僅包含數(shù)值,還包含一組索引。
dataframe通過列表、字典或二維數(shù)組創(chuàng)建,包含行索引和列索引。
?在此主要記錄DataFrame的使用,包括:
- 創(chuàng)建
- 修改索引?
- DataFrame數(shù)據(jù)信息的查看
1. DataFrame的創(chuàng)建
- 通過二維列表創(chuàng)建
- 通過字典創(chuàng)建
- 通過NumPy模塊創(chuàng)建的二維數(shù)組創(chuàng)建DataFrame
(1)創(chuàng)建空列表
????????df=df.DataFrame()
(2) 通過列表創(chuàng)建
????????a=pd.DataFrame([[1,2], [3,4]]) ?# 用二維列表創(chuàng)建2行2列的二維數(shù)組
????????還可以在創(chuàng)建時自定義行索引和列索引。
? ? ? ? a=pd.DataFrame([[1,2], [3,4]],columns=['data','score'],index=['a','b']) ?# columns指定列索引,index指定行索引。
(3)通過字典創(chuàng)建
????????a=pd.DataFrame({'a': [1,3,5],'b': [2,4,6]}, index=['x', 'y', 'z']) ?# 創(chuàng)建a,b列,xyz行的二維數(shù)組。如果想以字典的鍵名作為行索引,可以用from_dict()函數(shù)將字典轉(zhuǎn)換成DataFrame,同時設(shè)置參數(shù)orient的值為‘index’。
????????c=pd.DataFrame.from_dict({'a': [1,3,5],'b': [2,4,6]}, orient='index')
(4)通過NumPy模塊創(chuàng)建的二維數(shù)組創(chuàng)建DataFrame
????????a = np.arange(12).reshape(3, 4)
????????b = pd.DataFrame(a, index=[1,2,3], columns=['a', 'b', 'c', 'd'])??
2. DataFrame索引的修改
(1)a.index.name="Com"
(2)重命名索引rename()
????????rename()函數(shù)會用新索引創(chuàng)建一個新的DataFrame,不會改變原值。通過設(shè)置參數(shù)inplace為True來修改原值。
????????a.rename(index={'a':'萬科', 'b':'阿里', 'c':'百度'}, inplace=True) ?#更改行索引名稱? ?
????????a.rename(columns={'1':'分?jǐn)?shù)', '2':'排名'}, inplace=True) ?#更改列索引名稱
(3)行索引轉(zhuǎn)換為常規(guī)列
????????a=a.reset_index() ?# 設(shè)置參數(shù)inplace=True,可以一步到位的修改
(4)重新調(diào)整列順序
? ? ? ? df=df.reindex(columns=new_col_name)
(5)設(shè)置索引列
????????a=a.set_index['id',inplace=True] #將id列設(shè)為索引列
3. DataFrame數(shù)據(jù)信息查看
(1)df.shape ?#維度查看
(2)df.info() ?#數(shù)據(jù)表基本信息(維度、列名稱、數(shù)據(jù)格式、所占空間等)
(3)df.dtypes ?#每一列數(shù)據(jù)的格式
? ? ? ? df['A1'].dtype ?#某一列數(shù)據(jù)的格式
(4)df.isnull() ?#查看所有列是否為空值
? ? ? ? df['A1'].isnull() ?#查看某一列是否為空值
(5)df['A1'].unique ?#查看某一列的唯一值
(6)df.values ?#查看數(shù)據(jù)表的值
? ? ? ? 注:帶.values輸出的是np數(shù)組。不帶.values則輸出的是DataFrame類型**
(7)df.columns ?#查看列名稱
? ? ? ? df.columns.values ?#查看列名稱,并輸出值(輸出的是一個np數(shù)組)。
(8)df.index ?#查看行索引名稱
? ? ? ? df.index.values ?#查看列名稱,并輸出值(輸出的是一個np數(shù)組)。當(dāng)進行循環(huán)遍歷時,兩者一樣。
(9)df.head() ?#默認(rèn)輸出前5行
????????df.tail() ?#默認(rèn)輸出后5行
(10)print(data.describe()) ?#描述性統(tǒng)計
三、文件的讀取和寫入
1. 讀取
? ? ? ? data=pd.read_excel('data.xlsx') ?# 需要安裝openpyxl模塊?? ??? ??????????
df = pd.read_excel(r"/Users/andy/Downloads/books.xlsx", skiprows=3, usecols="C:F", index_col=None, sheet_name = 0, dtype = {"ID":str, "InStore":str)#文件的路徑使用"r", 主要是為了避免路徑出錯#skiprows表示忽略前面XX行. 例如上面的例子, 讀取的時候直接忽略了前面3行#usecols 表示讀取哪幾列, 可以使用列表的方式表示要導(dǎo)入哪幾列, 例如usecols = [0,2]#sheet_name 用于指定讀取哪個工作表#index_col表示使用哪一列作為索引#header=0, 可以使用header表示使用哪一行作為列索引#dtype使用字典, 更改對應(yīng)的Series的數(shù)據(jù)類型. 一般轉(zhuǎn)化成str, 便于后期的運算或修改df = pd.read_excel("/Users/andy/Downloads/books.xlsx", skiprows=3, usecols="C:F", index_col=None, sheet_name = 0, dtype = {"ID":str, "InStore":str})for i in df.index:df["ID"].at[i] = 1 + idf["InStore"].at[i] = "YES" if i % 2 == 0 else "NO"df["ID"] = df["ID"].astype("str").str.zfill(3)#在上面的例子中, ID這一列我使用了zfill()這個方法, 它會自動的讓字符前面自動添加0. 這里要注意的是, 只能為字符串添加zfill(), 所以我這里進行了數(shù)據(jù)類型的轉(zhuǎn)化. #讀取文件的時候, 使用了dtype參數(shù), 主要是為了將對應(yīng)的列轉(zhuǎn)化為字符串, 便于我們進行填充排序 #skiprows表示忽略哪幾行, usecols表示要導(dǎo)入哪些列, 可以使用列表的方式導(dǎo)入指定的列, 例如usecols = [0,3], 也可以按上面的方法?????????data=pd.read_csv('data.csv', delimiter=',', encoding='utf-8')
? ? ? ? ?#delimiter指定csv文件的數(shù)據(jù)分隔符;encoding指定文件的編碼方式;index_col用于設(shè)置索引。
? ? ? ? ?#注意:讀取excle時不能指定編碼encoding,讀取csv文件時可以指定?? ?
2. 寫入
????????data.to_excel('data.xlsx', sheet_name=0, columns=['A列'], index=False)
? ? ? ? sheet_name指定工作表的名成; index指定是否寫入行索引信息;columns指定要寫入的列;encoding指定編碼方式。
四、 數(shù)據(jù)的選取和處理
1. 數(shù)據(jù)的選取
**使用切片操作時,遵循左閉右開規(guī)則。先行后列,中間用逗號(,)分隔。**
(1)按行選取
data.iloc[1:3] data.loc[['r2', 'r3']] ?# 根據(jù)行的名稱來選取。列表中嵌套一個行列表。 data.head() ?# 用head函數(shù)選取前幾行(2)按區(qū)塊選取
a=data.iloc[0:2][['r1','r3' ]] a=data.iloc[0:2, [0,2]] ?# 讀取0-1行,0和2列。loc方法使用字符串作為索引,iloc方法使用數(shù)字作為索引; a=data.iloc[0:44, 0:5] ?# 讀取0-44行,0-5列。第0行0列為索引行和索引列 a=data.iloc[0:5, 11:12] ?# 讀取第0-5行,第12列(索引號為11)。 a=data.iloc[[0,2],[0,2]] ?#按位置單獨提取數(shù)據(jù)????????讀取指定不連續(xù)的多行多列,需要在列表中嵌套列表
(3)使用ix按索引標(biāo)簽和位置混合提取數(shù)據(jù)
????????df_inner.ix[:'2018-01-03',:4] ?# 將日期設(shè)為行索引,提取2018/1/3以前,前4列的數(shù)據(jù)
2. 數(shù)據(jù)的處理
(1)數(shù)據(jù)的篩選提取
a = data[data['c1']>1] ? # c1列大于1的行。多個篩選條件,用”&“(表示’且‘)或”|“(表示’或‘)連接。 data[data['c1'].str[-1].values=='年']|data['c1'].str[-1]=='月'] ? #按照c1列字符串最后一個字是年或月篩選 df.loc[(df['age']>20)&(df_inner['city']=='beijing'),['id','gender']] ?#行篩選,提取id、gender列 df.iloc[:5].iloc[df['c1']==2] #篩選前5行中c1列=2的行。(2)數(shù)據(jù)的排序? ?
? ? ?-按值排序
? ? ?a=data.sort_values(by='c2', ascending=False) ?# by指定按哪一列排序;ascending(“上升”的意思)默認(rèn)為True,升序;False表示降序
? ? ?-按索引排序
? ? ?a=a.sort_index() ?# 按索引列排序
? ? ?data.sort_index(axis=0,ascending=False) ?#降序排列行索引
? ? ?data.sort_index(axis=1,ascending=False) ?#降序排列列索引
(3)數(shù)據(jù)的運算
? ? ?通過數(shù)據(jù)運算可以基于已有的列生成新的一列
? ? ?data['c4']=data['c3']-data['c1']
? ? ?df.loc[(df_inner['city']=='beijing')].city.count() ?#對篩選后的數(shù)據(jù)按city列進行計數(shù)
? ? ?df[(df['city']=='beijing')].price.sum() ?#對篩選后的結(jié)果按price進行求和
?(4)數(shù)據(jù)的判斷
? ? ?df['city'].isin(['beijing']) ?#判斷city列是否包含beijing
? ? ?df_inner.loc[df_inner['city'].isin(['beijing','shanghai'])] ?#判斷city列里是否包含beijing和shanghai,然后將符合條件的數(shù)據(jù)提取出來
?(5)轉(zhuǎn)置
????????df.T ? ?
?(6)數(shù)據(jù)的修改、替換和填加 ? ??
? ? ?-數(shù)據(jù)的修改
? ? ?scores["ID"][1] ="1006" ?#數(shù)據(jù)的修改
? ? ?df.ix[['ID']=='shanghai', 'Scores']='90' ?#數(shù)據(jù)的修改。先選取,后賦值。
? ???-數(shù)據(jù)的替換
? ? ?df['city'].replace('shagnhai','sh') ?#數(shù)據(jù)替換
? ? ?-數(shù)據(jù)的添加
? ? ?scores["df1"]= scores["Scores"]//10 ?#添加一列df1,數(shù)據(jù)為Scores列除以10的商整數(shù)
? ? ?scores["df2"]= scores["Scores"]>85 ?#添加一列df2,數(shù)據(jù)為True或False
? ? ?df['group']=np.where(df_inner['price']>3000,'high','low') ?#添加一列,根據(jù)‘price’列的值來填
? ? ?注:增加行列還可以使用數(shù)據(jù)的拼接函數(shù)。插入列見下方數(shù)據(jù)的拼接。
?(7)數(shù)據(jù)的刪除
? ? ?pop()和drop()函數(shù)可以刪除DataFrame中的指定數(shù)據(jù)。
? ? ?data.pop('b3')
? ? ?drop([],axis=0,inplace) ?#axis=0指定刪除行,axis=1指定刪除列;index指定要刪除的行;columns指定要刪除的列;inplace默認(rèn)為False,表示刪除操作不改變原DataFrame。
? ? ?df.drop([0,1,3,6]) ?#刪除指定行,第1,2,4,7行的數(shù)據(jù)
? ? ?df.drop(['A1','D1'], axis=1) #刪除指定列。
? ? ?不論是刪除行還是刪除列,都可以通過drop方法實現(xiàn),只需要設(shè)定好刪除的軸即可,即調(diào)整drop方法中的axis參數(shù)。默認(rèn)該參數(shù)為0,表示刪除行。如果需要刪除列變量,則需設(shè)置為1。
??????drop_duplicate():去除重復(fù)項。
# 語法格式 DataFrame.drop_duplicates(subset=None, keep='first', inplace=False) #subset : column label or sequence of labels, optional #用來指定特定的列,默認(rèn)所有列 #keep : {‘first’, ‘last’, False}, default ‘first’ #刪除重復(fù)項并保留第一次出現(xiàn)的項 #inplace : boolean, default False 是直接在原來數(shù)據(jù)上修改還是保留一個副本data.drop_duplicates(subset='Num',keep='first',inplace=True) newdf=data.drop_duplicates()? ? ?del df ?#刪除整個df數(shù)據(jù)
(8)數(shù)據(jù)缺失值的處理
? ? ?對于缺失值的存在可能會影響到后期的數(shù)據(jù)分析或挖掘工作,那么我們該如何處理這些缺失值呢?常用的有三大類方法,即刪除法、填補法和插值法。
? ? ?刪除法:當(dāng)數(shù)據(jù)中的某個變量大部分值都是缺失值,可以考慮刪除改變量;當(dāng)缺失值是隨機分布的,且缺失的數(shù)量并不是很多是,也可以刪除這些缺失的觀測。
? ? ?替補法:對于連續(xù)型變量,如果變量的分布近似或就是正態(tài)分布的話,可以用均值替代那些缺失值;如果變量是有偏的,可以使用中位數(shù)來代替那些缺失值;對于離散型變量,我們一般用眾數(shù)去替換那些存在缺失的觀測。
? ? ?插補法:插補法是基于蒙特卡洛模擬法,結(jié)合線性模型、廣義線性模型、決策樹等方法計算出來的預(yù)測值替換缺失值。
?????-刪除法
? ? ?df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) ?#刪除缺失值
? ? ?how : {'any', 'all'}
? ? ?any : if any NA values are present, drop that label
? ? ?all : if all values are NA, drop that label
? ? ?df['A1'].drop_duplicates() ?#刪除后出現(xiàn)的重復(fù)值
? ? ?df['A1'].drop_duplicates(keep='last') ?#刪除先出現(xiàn)的重復(fù)值,保留后出現(xiàn)的
? ? ?通過del命令實現(xiàn),該命令可以刪除Python的所有對象。
? ? ?-替補法
? ? ?df.fillna() ?#填充空值?
? ? ?df.fillna(values=0) ?#用數(shù)字0填充空值
? ? ?df['A'].fillna(df['A1'].mean()) ?#用A1列的均值填充空值
? ? ?采用前項填充或后項填充
? ? ?df.fillna(method='ffill') ?#采用前項填充
? ? ?df.fillna(method='bfill') ?#采用后項填充
(9)df['A1'].map(str.strip) ?#對某一列數(shù)據(jù)中的字符串進行strip處理
(10)df['A1'].str.lower() ?#對某一列數(shù)據(jù)中的字符串進行大小寫轉(zhuǎn)換
(11)df['A1'].astype('float') ?#對某一列數(shù)據(jù)中的數(shù)據(jù)進行數(shù)據(jù)類型轉(zhuǎn)換
(12)df.loc[(df['city']=='beijing')&(df['price']>100),'sign']=1 ?#對復(fù)合多個條件的數(shù)據(jù)進行分組標(biāo)記
(13)split=pd.DataFrame((x.split('-') for x in df_inner['category']),index=df_inner.index,columns=['category','size']) ?#對category字段的值依次進行**分列**,并創(chuàng)建新的DataFrame數(shù)據(jù)表,索引值為df_inner的索引列,列名稱為category和size
(14)pd.DataFrame(category.str[:3]) ?#提取前三個字符,并生成數(shù)據(jù)表
(15)對DataFrame使用函數(shù)
? ? ?def multiply(x):
? ? ?????????return x * 2
? ? ?df["height"].**apply**(multiply)
3. 數(shù)據(jù)的拼接(增加行、列)
? ? ?-merge()函數(shù)
? ? ?-concat()函數(shù)
? ? ?-append()函數(shù)?? ?
?(1)merge()函數(shù)
?????根據(jù)一個或多個同名的列將不同數(shù)據(jù)表中的行連接起來。
? ? ?df3 = pd.merge(df1,df2, on='公司', how='outer')
? ? ?on指定按照哪一同名列進行合并;how=outer指取并集連接。how=left指保留左表全部內(nèi)容,而對右表不太在意;how=right指保留右表全部內(nèi)容,而對左表不太在意;
? ? ?df3 = pd.merge(df1,df2,left_index=True, right_index=True) ?# 按照行索引進行合并
(2)concat()函數(shù)
????????使用全連接方式完成拼接,不需要對齊,而是直接進行合并。用參數(shù)axis指定連接的軸向,默認(rèn)為0,即按行方向連接(縱向拼接)
????????df3 = pd.concat([df1, df2], axis=0, ignore_index=True) ?#忽略原有索引,生成新的數(shù)字序列作為索引。?
(3)append()函數(shù)
????????實現(xiàn)的是縱向拼接。
????????df3 = df1.append(df2)
????????另一個用途是新增元素。新增元素時,一定要設(shè)置參數(shù)ignore_index=True來忽略原索引,否則會報錯。
????????df3 = df1.append({'公司':'騰飛', '分?jǐn)?shù)': '90'}, ignore_index=True)
(4)增加一行
#在0行前增加一行 df.loc[-1]=list df.index=df.index+1 df=df.sort_index()#在最后一行增加一行 size=df.index.size df.loc[siez]=list(5) 插入一列
#方法一: df.insert(1,'要增加的列的列名',list) #直接使用insert方法插入列,需要同時插入值#方法二: df_col_name=df.columns.tolist() #先取出所有列名到一個列表中 df_col_name.insert(2,'aa') #在列名的列表中插入要增加的列名 df=df.reindex(columns=df_col_name) #將重設(shè)列名為新的列名。用這種方法不需要同時輸入該列的值4. 數(shù)據(jù)的統(tǒng)計分析
????????pandas模塊為我們提供了非常多的描述性統(tǒng)計分析的指標(biāo)函數(shù),如總和、均值、最小值、最大值等,我們來具體看看這些函數(shù):
????????首先隨機生成三組數(shù)據(jù)
????????np.random.seed(1234)
????????d1 = pd.Series(2*np.random.normal(size = 100)+3)
? ? ? ? d2 = np.random.f(2,4,size = 100)
????????d3 = np.random.randint(1,100,size = 100)
????????d1.count() #非空元素計算
????????d1.min() #最小值
????????d1.max() #最大值
????????d1.idxmin() #最小值的位置,類似于R中的which.min函數(shù)
????????d1.idxmax() #最大值的位置,類似于R中的which.max函數(shù)
????????d1.quantile(0.1) #10%分位數(shù)
????????d1.sum() #求和
????????d1.mean() #均值
????????d1.median() #中位數(shù)
????????d1.mode() #眾數(shù)
????????d1.var() #方差
????????d1.std() #標(biāo)準(zhǔn)差
????????d1.mad() #平均絕對偏差
????????d1.skew() #偏度
????????d1.kurt() #峰度
????????d1.describe() #一次性輸出多個描述性統(tǒng)計指標(biāo)。必須注意的是,descirbe方法只能針對序列或數(shù)據(jù)框,一維數(shù)組是沒有這個方法的
? ? 這里自定義一個函數(shù),將這些統(tǒng)計描述指標(biāo)全部匯總到一起:
def stats(x):return pd.Series([x.count(),x.min(),x.idxmin(),x.quantile(.25),x.median(),x.quantile(.75),x.mean(),x.max(),x.idxmax(),x.mad(),x.var(),x.std(),x.skew(),x.kurt()],index = ['Count','Min','Whicn_Min','Q1','Median','Q3','Mean','Max','Which_Max','Mad','Var','Std','Skew','Kurt'])stats(d1)????????在實際的工作中,我們可能需要處理的是一系列的數(shù)值型數(shù)據(jù)框,如何將這個函數(shù)應(yīng)用到數(shù)據(jù)框中的每一列呢?可以使用apply函數(shù)。
????????將之前創(chuàng)建的d1,d2,d3數(shù)據(jù)構(gòu)建數(shù)據(jù)框:
????????非常完美,就這樣很簡單的創(chuàng)建了數(shù)值型數(shù)據(jù)的統(tǒng)計性描述。如果是離散型數(shù)據(jù)呢?就不能用這個統(tǒng)計口徑了,我們需要統(tǒng)計離散變量的觀測數(shù)、唯一值個數(shù)、眾數(shù)水平及個數(shù)。你只需要使用describe方法就可以實現(xiàn)這樣的統(tǒng)計了。
????????除以上的簡單描述性統(tǒng)計之外,還提供了連續(xù)變量的相關(guān)系數(shù)(corr)和協(xié)方差矩陣(cov)的求解,這個跟R語言是一致的用法。
????????df.corr():關(guān)于相關(guān)系數(shù)的計算可以調(diào)用pearson方法或kendell方法或spearman方法,默認(rèn)使用pearson方法。
????????df.corr('spearman')
? ? 如果只想關(guān)注某一個變量與其余變量的相關(guān)系數(shù)的話,可以使用corrwith,如下方只關(guān)心x1與其余變量的相關(guān)系數(shù):df.corrwith(df['x1'])
????????df.cov():數(shù)值型變量間的協(xié)方差矩陣
5. 數(shù)據(jù)的匯總? ?
????????主要函數(shù)是groupby和pivote_table。 ? ??
????????-**數(shù)據(jù)聚合:groupby()函數(shù)**
? ? ?聚合:pandas模塊中可以通過groupby()函數(shù)實現(xiàn)數(shù)據(jù)的聚合操作
(1)對所有的列進行計數(shù)匯總
df_inner.groupby('city').count() ?#根據(jù)city分組,對其它列進行統(tǒng)計 student.groupby('Sex').mean() ?#根據(jù)性別分組,對其它列求平均值(2)按城市對id字段進行計數(shù)
df_inner.groupby('city')['id'].count()(3)groupby還可以使用多個分組變量,例如對兩個字段進行匯總計數(shù)
df_inner.groupby(['city','size'])['id'].count() student.groupby(['Age','Sex']).mean() ? #根據(jù)年齡、性別分組,對其它列求平均值(4)對city字段進行匯總,并分別計算price的合計和均值
df_inner.groupby('city')['price'].agg([len,np.sum,np.mean])?-**數(shù)據(jù)透視表 pivote_table函數(shù)**
????????pandas為我們提供了非常強大的函數(shù)pivot_table(),該函數(shù)就是實現(xiàn)數(shù)據(jù)透視表功能的。我們先看看這個函數(shù)的語法和參數(shù):
????????pivot_table(data,values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All')
? ? ? ? data:需要進行數(shù)據(jù)透視表操作的數(shù)據(jù)框
????????values:指定需要聚合的字段
????????index:指定某些原始變量作為行索引
????????columns:指定哪些離散的分組變量
????????aggfunc:指定相應(yīng)的聚合函數(shù)
????????fill_value:使用一個常數(shù)替代缺失值,默認(rèn)不替換
????????margins:是否進行行或列的匯總,默認(rèn)不匯總
????????dropna:默認(rèn)所有觀測為缺失的列
????????margins_name:默認(rèn)行匯總或列匯總的名稱為'All'?
? ? 例1:對一個分組變量(Sex),一個數(shù)值變量(Height)作統(tǒng)計匯總
????????pd.pivot_table(student, values=['Height'], columns=['Sex'])
? ? 例2:對一個分組變量(Sex),兩個數(shù)值變量(Height,Weight)作統(tǒng)計匯總
????????pd.pivot_table(student, values=['Height','Weight'], columns=['Sex'])
? ? 例3:對兩個分組變量(Sex,Age),兩個數(shù)值變量(Height,Weight)作統(tǒng)計匯總
????????pd.pivot_table(student, values=['Height','Weight'], columns=['Sex','Age'])
? ? 這樣的結(jié)果并不像Excel中預(yù)期的那樣,該如何變成列聯(lián)表的形式的?很簡單,只需將結(jié)果進行非堆疊操作(unstack)即可: ?pd.pivot_table(student, values=['Height','Weight'], columns=['Sex','Age']).unstack()
參考文章:
python之pandas用法大全 - 我不叫鬧心 - 博客園
Pandas學(xué)習(xí)筆記詳版
Python數(shù)據(jù)分析之pandas學(xué)習(xí)_weixin_30763455的博客-CSDN博客
總結(jié)
以上是生活随笔為你收集整理的Python模块之Pandas模块学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 游戏行业如何上云?阿里云架构师解读四大主
- 下一篇: Python基于OpenCV的实时疲劳检