柚子快報(bào)激活碼778899分享:pandas學(xué)習(xí)這些就夠了
柚子快報(bào)激活碼778899分享:pandas學(xué)習(xí)這些就夠了
?歡迎來(lái)到python的世界
?歡迎關(guān)注?點(diǎn)贊?收藏??留言?
?本階段屬于練氣階段,希望各位仙友順利完成突破
pandas的學(xué)習(xí)思路:
實(shí)際工作當(dāng)中我們?cè)谑褂胮andas庫(kù)的時(shí)候,我們應(yīng)該有什么樣的思路? 那些使我們經(jīng)常使用到的?
總的思想就是導(dǎo)入數(shù)據(jù)進(jìn)行處理,根據(jù)結(jié)果生成圖像,從結(jié)果得到結(jié)論,那這么多的api 我們?nèi)绾稳ビ洃? 那些是工作中經(jīng)常被使用到的,我們下面來(lái)分別進(jìn)行討論.
一、基本概念
了解 pandas 是用于數(shù)據(jù)操作和分析的庫(kù)。 明白 Series 和 DataFrame 這兩種主要數(shù)據(jù)結(jié)構(gòu)的特點(diǎn),下面我們來(lái)認(rèn)識(shí)一下這兩數(shù)據(jù)結(jié)構(gòu) Series 可以看作是一個(gè)一維的、帶標(biāo)簽的數(shù)組。它有一個(gè)標(biāo)簽序列(index)和一個(gè)值序列(data)。Series 的標(biāo)簽通常是唯一的,但這不是強(qiáng)制的。 示例: import pandas as pd
# 創(chuàng)建一個(gè)簡(jiǎn)單的 Series
s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(s)
輸出: a 1
b 2
c 3
d 4
dtype: int64
在這個(gè)示例中,'a', 'b', 'c', 'd' 是索引(index),1, 2, 3, 4 是對(duì)應(yīng)的值(data)。 DataFrame 是一個(gè)二維的、大小可變的、具有潛在異構(gòu)類型列的表格型數(shù)據(jù)結(jié)構(gòu)。你可以將其看作是一個(gè) Excel 表格或 SQL 表,或者是一個(gè)由 Series 對(duì)象組成的字典。DataFrame 的每一列都可以是一個(gè)不同值的類型(數(shù)值、字符串、布爾值等)。 示例: # 創(chuàng)建一個(gè)簡(jiǎn)單的 DataFrame
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': ['x', 'y', 'z']
})
print(df)
輸出: A B C
0 1 4 x
1 2 5 y
2 3 6 z
在這個(gè)示例中,A, B, C 是列標(biāo)簽,0, 1, 2 是行索引。
二、實(shí)際工作的分析數(shù)據(jù)的流程
(1) 生成數(shù)據(jù)表**?* 工作當(dāng)中一般是用導(dǎo)入.scv文件和.excel文件居多, 或者連接數(shù)據(jù)庫(kù)讀取數(shù)據(jù)庫(kù)里的表數(shù)據(jù)(2)數(shù)據(jù)表信息查看**?* 這個(gè)步驟的目的是使我們能快速了解數(shù)據(jù)表的結(jié)構(gòu),方便我們下面處理數(shù)據(jù)
(3)數(shù)據(jù)表清洗(4)數(shù)據(jù)預(yù)處理(5)數(shù)據(jù)提取(6)數(shù)據(jù)篩選(7)數(shù)據(jù)匯總(8)數(shù)據(jù)統(tǒng)計(jì) (9)數(shù)據(jù)輸出(10)數(shù)據(jù)的可視化: 以圖表的形式進(jìn)行展現(xiàn),更加的直觀
三、對(duì)應(yīng)具體的api 歸納匯總?cè)缦?注意重點(diǎn)已加粗):
一、生成數(shù)據(jù)表
1、首先導(dǎo)入pandas庫(kù),一般都會(huì)用到numpy庫(kù),所以我們先導(dǎo)入備用:
import numpy as np
import pandas as pd
2、導(dǎo)入CSV或者xlsx文件:
df = pd.DataFrame(pd.read_csv('name.csv',header=1))
df = pd.DataFrame(pd.read_excel('name.xlsx'))
二、數(shù)據(jù)表信息查看(pandas的屬性api)
1、維度查看:
df.shape
2、數(shù)據(jù)表基本信息(維度、列名稱、數(shù)據(jù)格式、所占空間等):
df.info()
3、統(tǒng)計(jì)每列的(最大值,最小值,平均值,標(biāo)準(zhǔn)差等):
df.describe()
4、某一列格式:
df['B'].dtype
5、空值:
df.isnull()
6、查看某一列空值:
df['B'].isnull()
7、查看某一列的唯一值:
df['B'].unique()
8、查看數(shù)據(jù)表的值:
df.values
9、查看列名稱:
df.columns
10、查看前5行數(shù)據(jù)、后5行數(shù)據(jù):
df.head() #默認(rèn)前5行數(shù)據(jù)
df.tail() #默認(rèn)后5行數(shù)據(jù)
三、數(shù)據(jù)表清洗
1、用數(shù)字0填充空值:
df.fillna(value=0)
2、使用列prince的平均值對(duì)NA進(jìn)行填充:
df['prince'].fillna(df['prince'].mean())
3、清除city字段的字符空格:
df['city']=df['city'].map(str.strip)
4、大小寫(xiě)轉(zhuǎn)換:
df['city']=df['city'].str.lower()
5、更改數(shù)據(jù)格式:
df['price'].astype('int')
6、更改列名稱:
df.rename(columns={'category': 'category-size'})
7、刪除后出現(xiàn)的重復(fù)值:
df['city'].drop_duplicates()
8 、刪除先出現(xiàn)的重復(fù)值:
df['city'].drop_duplicates(keep='last')
9、數(shù)據(jù)替換:
df['city'].replace('sh', 'shanghai')
四、數(shù)據(jù)預(yù)處理
1、數(shù)據(jù)表合并(工作當(dāng)中更多的是聯(lián)表進(jìn)行查詢的) 1.1 merge()
# 橫向添加數(shù)據(jù)
df.merge(df1,how='left', on ='列名') #左表的全部 + 交集
df.merge(df1,how='right', on ='列名') #交集+ 右表的全部
df.merge(df1,how='inner', on ='列名') #交集
df.merge(df1,how='outer', on ='列名') #左表全部+右表的全部
1.2 append()
# 縱向添加數(shù)據(jù)
result = df1.append(df2)
1.3 join()
# 橫向添加數(shù)據(jù)
df.join(df1,how='right', on='key') # 如果不指定連接列名默認(rèn)更具索引進(jìn)行連表
1.4 concat()
# 根據(jù)axis 可以縱向或者橫向添加數(shù)據(jù)
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
copy=True)
objs︰ 一個(gè)序列或系列、 綜合或面板對(duì)象的映射。如果字典中傳遞,將作為鍵參數(shù),使用排序的鍵,除非它傳遞,在這種情況下的值將會(huì)選擇 (見(jiàn)下文)。任何沒(méi)有任何反對(duì)將默默地被丟棄,除非他們都沒(méi)有在這種情況下將引發(fā) ValueError。 axis: {0,1,…},默認(rèn)值為 0。要連接沿軸。 join: {‘內(nèi)部’、 ‘外’},默認(rèn) ‘外’。如何處理其他 axis(es) 上的索引。聯(lián)盟內(nèi)、 外的交叉口。 ignore_index︰ 布爾值、 默認(rèn) False。如果為 True,則不要串聯(lián)軸上使用的索引值。由此產(chǎn)生的軸將標(biāo)記 0,…,n-1。這是有用的如果你串聯(lián)串聯(lián)軸沒(méi)有有意義的索引信息的對(duì)象。請(qǐng)注意在聯(lián)接中仍然受到尊重的其他軸上的索引值。 join_axes︰ 索引對(duì)象的列表。具體的指標(biāo),用于其他 n-1 軸而不是執(zhí)行內(nèi)部/外部設(shè)置邏輯。 keys︰ 序列,默認(rèn)為無(wú)。構(gòu)建分層索引使用通過(guò)的鍵作為最外面的級(jí)別。如果多個(gè)級(jí)別獲得通過(guò),應(yīng)包含元組。 levels︰ 列表的序列,默認(rèn)為無(wú)。具體水平 (唯一值) 用于構(gòu)建多重。否則,他們將推斷鑰匙。 names︰ 列表中,默認(rèn)為無(wú)。由此產(chǎn)生的分層索引中的級(jí)的名稱。 verify_integrity︰ 布爾值、 默認(rèn) False。檢查是否新的串聯(lián)的軸包含重復(fù)項(xiàng)。這可以是相對(duì)于實(shí)際數(shù)據(jù)串聯(lián)非常昂貴。 副本︰ 布爾值、 默認(rèn) True。如果為 False,請(qǐng)不要,不必要地復(fù)制數(shù)據(jù)。 例子:1.frames = [df1, df2, df3] ? 2.result = pd.concat(frames)
2、設(shè)置索引列
df_inner.set_index('id')
3、按照特定列的值排序:
df_inner.sort_values(by=['age'])
4、按照索引列排序:
df_inner.sort_index()
5、如果prince列的值>3000,group列顯示high,否則顯示low:
df_inner['group'] = np.where(df_inner['price'] > 3000,'high','low')
6、對(duì)復(fù)合多個(gè)條件的數(shù)據(jù)進(jìn)行分組標(biāo)記
df_inner.loc[(df_inner['city'] == 'beijing') & (df_inner['price'] >= 4000), 'sign']=1
7、對(duì)category字段的值依次進(jìn)行分列,并創(chuàng)建數(shù)據(jù)表,索引值為df_inner的索引列,列名稱為category和size
pd.DataFrame((x.split('-') for x in df_inner['category']),index=df_inner.index,columns=['category','size'])
8、將完成分裂后的數(shù)據(jù)表和原df_inner數(shù)據(jù)表進(jìn)行匹配
df_inner=pd.merge(df_inner,split,right_index=True, left_index=True)
五、數(shù)據(jù)提取 主要用到的三個(gè)函數(shù):loc,iloc和ix,loc函數(shù)按標(biāo)簽值進(jìn)行提取,iloc按位置進(jìn)行提取,ix可以同時(shí)按標(biāo)簽和位置進(jìn)行提取。
1、按索引提取單行的數(shù)值
df_inner.loc[3]
2、按索引提取區(qū)域行數(shù)值
df_inner.iloc[0:5]
3、重設(shè)索引
df_inner.reset_index()
4、設(shè)置日期為索引
df_inner=df_inner.set_index('date')
5、提取4日之前的所有數(shù)據(jù)
df_inner[:'2013-01-04']
6、使用iloc按位置區(qū)域提取數(shù)據(jù)
df_inner.iloc[:3,:2] #冒號(hào)前后的數(shù)字不再是索引的標(biāo)簽名稱,而是數(shù)據(jù)所在的位置,從0開(kāi)始,前三行,前兩列
7、適應(yīng)iloc按位置單獨(dú)提起數(shù)據(jù)
df_inner.iloc[[0,2,5],[4,5]] #提取第0、2、5行,4、5列
8、使用ix按索引標(biāo)簽和位置混合提取數(shù)據(jù)
df_inner.ix[:'2013-01-03',:4] #2013-01-03號(hào)之前,前四列數(shù)據(jù)
9、判斷city列的值是否為北京
df_inner['city'].isin(['beijing'])
10、判斷city列里是否包含beijing和shanghai,然后將符合條件的數(shù)據(jù)提取出來(lái)
df_inner.loc[df_inner['city'].isin(['beijing','shanghai'])]
11、提取前三個(gè)字符,并生成數(shù)據(jù)表
pd.DataFrame(df_inner['category'].str[:3])
六、數(shù)據(jù)篩選 使用與、或、非三個(gè)條件配合大于、小于、等于對(duì)數(shù)據(jù)進(jìn)行篩選,并進(jìn)行計(jì)數(shù)和求和。
1、使用“與”進(jìn)行篩選
df_inner.loc[(df_inner['age'] > 25) & (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']]
2、使用“或”進(jìn)行篩選
df_inner.loc[(df_inner['age'] > 25) | (df_inner['city'] == 'beijing'), ['id','city','age','category','gender']].sort(['age'])
3、使用“非”條件進(jìn)行篩選
df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id'])
4、對(duì)篩選后的數(shù)據(jù)按city列進(jìn)行計(jì)數(shù)
df_inner.loc[(df_inner['city'] != 'beijing'), ['id','city','age','category','gender']].sort(['id']).city.count()
5、使用query函數(shù)進(jìn)行篩選
df_inner.query('city == ["beijing", "shanghai"]')
6、對(duì)篩選后的結(jié)果按prince進(jìn)行求和
df_inner.query('city == ["beijing", "shanghai"]').price.sum()
七、數(shù)據(jù)匯總 主要函數(shù)是groupby和pivote_table
1、對(duì)所有的列進(jìn)行計(jì)數(shù)匯總
df_inner.groupby('city').count()
2、按城市對(duì)id字段進(jìn)行計(jì)數(shù)
df_inner.groupby('city')['id'].count()
3、對(duì)兩個(gè)字段進(jìn)行匯總計(jì)數(shù)
df_inner.groupby(['city','size'])['id'].count()
4、對(duì)city字段進(jìn)行匯總,并分別計(jì)算prince的合計(jì)和均值
df_inner.groupby('city')['price'].agg([len,np.sum, np.mean])
八、數(shù)據(jù)統(tǒng)計(jì) 數(shù)據(jù)采樣,計(jì)算標(biāo)準(zhǔn)差,協(xié)方差和相關(guān)系數(shù)
1、簡(jiǎn)單的數(shù)據(jù)采樣
df_inner.sample(n=3)
2、手動(dòng)設(shè)置采樣權(quán)重
weights = [0, 0, 0, 0, 0.5, 0.5]
df_inner.sample(n=2, weights=weights)
3、采樣后不放回
df_inner.sample(n=6, replace=False)
4、采樣后放回
df_inner.sample(n=6, replace=True)
5、 數(shù)據(jù)表描述性統(tǒng)計(jì)
df_inner.describe().round(2).T #round函數(shù)設(shè)置顯示小數(shù)位,T表示轉(zhuǎn)置
6、計(jì)算列的標(biāo)準(zhǔn)差
df_inner['price'].std()
7、計(jì)算兩個(gè)字段間的協(xié)方差
df_inner['price'].cov(df_inner['m-point'])
8、數(shù)據(jù)表中所有字段間的協(xié)方差
df_inner.cov()
9、兩個(gè)字段的相關(guān)性分析
df_inner['price'].corr(df_inner['m-point']) #相關(guān)系數(shù)在-1到1之間,接近1為正相關(guān),接近-1為負(fù)相關(guān),0為不相關(guān)
10、數(shù)據(jù)表的相關(guān)性分析
df_inner.corr()
九、數(shù)據(jù)輸出 1.分析后的數(shù)據(jù)可以輸出為xlsx格式和csv格式1、寫(xiě)入Excel
df_inner.to_excel('excel_to_python.xlsx', sheet_name='bluewhale_cc')
2、寫(xiě)入到CSV
df_inner.to_csv('excel_to_python.csv')
十、數(shù)據(jù)可視化
數(shù)據(jù)的可是化,用柱狀圖,扇形圖,折線圖來(lái)進(jìn)行展示,更加直觀的展現(xiàn)
df_inner.polt(kind='bar') # 柱狀圖
df_inner.polt(kind='line') # 折線圖
df_inner.polt(kind='area') # 面積圖
df_inner.polt(kind='pie ') # 餅狀圖
df_inner.polt(kind='scatter') # 散點(diǎn)圖
df_inner.polt(kind='hist ') # 直方圖
df_inner.polt(kind='hexbin') # 蜂巢圖
df_inner.polt(kind='bar',stacked=True) # 堆疊圖
柚子快報(bào)激活碼778899分享:pandas學(xué)習(xí)這些就夠了
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。