詳解Python數(shù)據(jù)分析--Pandas知識(shí)點(diǎn)
本文主要是總結(jié)學(xué)習(xí)pandas過程中用到的函數(shù)和方法, 在此記錄, 防止遺忘
1. 重復(fù)值的處理
利用drop_duplicates()函數(shù)刪除數(shù)據(jù)表中重復(fù)多余的記錄, 比如刪除重復(fù)多余的ID.
import pandas as pd df = pd.DataFrame({"ID": ["A1000","A1001","A1002", "A1002"], "departmentId": [60001,60001, 60001, 60001]}) df.drop_duplicates()
2. 缺失值的處理
缺失值是數(shù)據(jù)中因缺少信息而造成的數(shù)據(jù)聚類, 分組, 截?cái)嗟?/p>
2.1 缺失值產(chǎn)生的原因
主要原因可以分為兩種: 人為原因和機(jī)械原因.
1) 人為原因: 由于人的主觀失誤造成數(shù)據(jù)的缺失, 比如數(shù)據(jù)錄入人員的疏漏;
2) 機(jī)械原因: 由于機(jī)械故障導(dǎo)致的數(shù)據(jù)收集或者數(shù)據(jù)保存失敗從而造成數(shù)據(jù)的缺失.
2.2 缺失值的處理方式
缺失值的處理方式通常有三種: 補(bǔ)齊缺失值, 刪除缺失值, 刪除缺失值, 保留缺失值.
1) 補(bǔ)齊缺失值: 使用計(jì)算出來的值去填充缺失值, 例如樣本平均值.
使用fillna()函數(shù)對(duì)缺失值進(jìn)行填充, 使用mean()函數(shù)計(jì)算樣本平均值.
import pandas as pd import numpy as np df = pd.DataFrame({'ID':['A10001', 'A10002', 'A10003', 'A10004'], "Salary":[11560, np.NaN, 12988,12080]}) #用Salary字段的樣本均值填充缺失值 df["Salary"] = df["Salary"].fillna(df["Salary"].mean()) df
2) 刪除缺失值: 當(dāng)數(shù)據(jù)量大時(shí)且缺失值占比較小可選用刪除缺失值的記錄.
示例: 刪除entrytime中缺失的值,采用dropna函數(shù)對(duì)缺失值進(jìn)行刪除:
import pandas as pd df = pd.DataFrame({"ID": ["A1000","A1001","A1002"], "entrytime": ["2015-05-06",pd.NaT,"2016-07-01" ]}) df.dropna()
3) 保留缺失值.
3. 刪除前后空格
使用strip()函數(shù)刪除前后空格.
import pandas as pd df = pd.DataFrame({"ID": ["A1000","A1001","A1002"], "Surname": [" Zhao ","Qian"," Sun " ]}) df["Surname"] = df["Surname"].str.strip() df
4. 查看數(shù)據(jù)類型
查看所有列的數(shù)據(jù)類型使用dtypes, 查看單列使用dtype, 具體用法如下:
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]}) #查看所有列的數(shù)據(jù)類型 df.dtypes #查看單列的數(shù)據(jù)類型 df["ID"].dtype
5. 修改數(shù)據(jù)類型
使用astype()函數(shù)對(duì)數(shù)據(jù)類型進(jìn)行修改, 用法如下
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]}) #將ID列的類型轉(zhuǎn)化為字符串的格式 df["ID"].astype(str)
6. 字段的抽取
使用slice(start, end)函數(shù)可完成字段的抽取, 注意start是從0開始且不包含end. 比如抽取前兩位slice(0, 2).
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname": [" Zhao ","Qian"," Sun " ]}) #需要將ID列的類型轉(zhuǎn)換為字符串, 否則無法使用slice()函數(shù) df["ID"]= df["ID"].astype(str) #抽取ID前兩位 df["ID"].str.slice(0,2)
7. 字段的拆分
使用split()函數(shù)進(jìn)行字段的拆分, split(pat=None, n = -1, expand=True)函數(shù)包含三個(gè)參數(shù):
第一個(gè)參數(shù)則是分隔的字符串, 默認(rèn)是以空格分隔
第二個(gè)參數(shù)則是分隔符使用的次數(shù), 默認(rèn)分隔所有
第三個(gè)參數(shù)若是True, 則在不同的列展開, 否則以序列的形式顯示.
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]}) #對(duì)Surname_Age字段進(jìn)行拆分 df_new = df["Surname_Age"].str.split("_", expand =True) df_new
8. 字段的命名
有兩種方式一種是使用rename()函數(shù), 另一種是直接設(shè)置columns參數(shù)
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]}) #第一種方法使用rename()函數(shù) # df_new = df["Surname_Age"].str.split("_", expand =True).rename(columns={0: "Surname", 1: "Age"}) # df_new #第二種方法直接設(shè)置columns參數(shù) df_new = df["Surname_Age"].str.split("_", expand =True) df_new.columns = ["Surname","Age"] df_new
兩種方式同樣的結(jié)果:
9. 字段的合并
使用merge()函數(shù)對(duì)字段進(jìn)行合并操作.
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]}) df_new = df["Surname_Age"].str.split("_", expand =True) df_new.columns = ["Surname","Age"] #使用merge函數(shù)對(duì)兩表的字段進(jìn)行合并操作. pd.merge(df, df_new, left_index =True, right_index=True)
10. 字段的刪除
利用drop()函數(shù)對(duì)字段進(jìn)行刪除.
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]}) df_new = df["Surname_Age"].str.split("_", expand =True) df_new.columns = ["Surname","Age"] df_mer= pd.merge(df, df_new, left_index =True, right_index=True) #drop()刪除字段,第一個(gè)參數(shù)指要?jiǎng)h除的字段,axis=1表示字段所在列,inplace為True表示在當(dāng)前表執(zhí)行刪除. df_mer.drop("Surname_Age", axis = 1, inplace =True) df_mer
刪除Surname_Age字段成功:
11. 記錄的抽取
1) 關(guān)系運(yùn)算: df[df.字段名 關(guān)系運(yùn)算符 數(shù)值], 比如抽取年齡大于30歲的記錄.
import pandas as pd df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28" ]}) df_new = df["Surname_Age"].str.split("_", expand =True) df_new.columns = ["Surname","Age"] df_mer= pd.merge(df, df_new, left_index =True, right_index=True) df_mer.drop("Surname_Age", axis = 1, inplace =True) #將Age字段數(shù)據(jù)類型轉(zhuǎn)化為整型 df_mer["Age"] = df_mer["Age"].astype(int) #抽取Age中大于30的記錄 df_mer[df_mer.Age > 30]
2) 范圍運(yùn)算: df[df.字段名.between(s1, s2)], 注意既包含s1又包含s2, 比如抽取年齡大于等于23小于等于28的記錄.
df_mer[df_mer.Age.between(23,28)]
3) 邏輯運(yùn)算: 與(&) 或(|) 非(not)
比如上面的范圍運(yùn)算df_mer[df_mer.Age.between(23,28)]就等同于df_mer[(df_mer.Age >= 23) & (df_mer.Age <= 28)]
df_mer[(df_mer.Age >= 23 ) & (df_mer.Age <= 28)]
4) 字符匹配: df[df.字段名.str.contains("字符", case = True, na =False)] contains()函數(shù)中case=True表示區(qū)分大小寫, 默認(rèn)為True; na = False表示不匹配缺失值.
import pandas as pd import numpy as np df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28"],"SpouseAge":[np.NaN,"32",np.NaN]}) #匹配SpouseAge中包含2的記錄 df[df.SpouseAge.str.contains("2",na = False)]
當(dāng)na改為True時(shí), 結(jié)果為:
5) 缺失值匹配:df[pd.isnull(df.字段名)]表示匹配該字段中有缺失值的記錄.
import pandas as pd import numpy as np df = pd.DataFrame({"ID": [100000,100101,100201],"Surname_Age": ["Zhao_23","Qian_33","Sun_28"],"SpouseAge":[np.NaN,"32",np.NaN]}) #匹配SpouseAge中有缺失值的記錄 df[pd.isnull(df.SpouseAge)]
12.記錄的合并
使用concat()函數(shù)可以將兩個(gè)或者多個(gè)數(shù)據(jù)表的記錄合并一起, 用法: pandas.concat([df1, df2, df3.....])
import pandas as pd df1 = pd.DataFrame({"ID": ["A10006","A10001"],"Salary": [12000, 20000]}) df2 = pd.DataFrame({"ID": ["A10008"], "Salary": [10000]}) #使用concat()函數(shù)將df1與df2的記錄進(jìn)行合并 pd.concat([df1, df2])
以上是部分內(nèi)容, 還會(huì)持續(xù)總結(jié)更新....
以上所述是小編給大家介紹的Python數(shù)據(jù)分析--Pandas知識(shí)點(diǎn)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Python數(shù)據(jù)分析模塊pandas用法詳解
- Python數(shù)據(jù)分析庫(kù)pandas基本操作方法
- Python數(shù)據(jù)分析之如何利用pandas查詢數(shù)據(jù)示例代碼
- 基于Python數(shù)據(jù)分析之pandas統(tǒng)計(jì)分析
- Python數(shù)據(jù)分析pandas模塊用法實(shí)例詳解
- Python數(shù)據(jù)分析之真實(shí)IP請(qǐng)求Pandas詳解
- Python數(shù)據(jù)分析庫(kù)pandas高級(jí)接口dt的使用詳解
- Python Pandas數(shù)據(jù)分析工具用法實(shí)例
- Python入門之使用pandas分析excel數(shù)據(jù)
- python利用pandas分析學(xué)生期末成績(jī)實(shí)例代碼
相關(guān)文章
三分鐘教會(huì)你用Python+OpenCV批量裁剪xml格式標(biāo)注的圖片
最近學(xué)習(xí)網(wǎng)絡(luò)在線課程的過程中,為了方便課后復(fù)習(xí),使用手機(jī)截取了大量的圖片,下面這篇文章主要給大家介紹了如何通過三分鐘教會(huì)你用Python+OpenCV批量裁剪xml格式標(biāo)注圖片的相關(guān)資料,需要的朋友可以參考下2022-01-01解析Mac OS下部署Pyhton的Django框架項(xiàng)目的過程
這篇文章主要介紹了Mac OS下部署Pyhton的Django框架項(xiàng)目的過程,還附帶將了一個(gè)gunicorn結(jié)合Nginx來部署Django應(yīng)用的方法,需要的朋友可以參考下2016-05-05單步調(diào)試 step into/step out/step over 區(qū)
這篇文章主要介紹了單步調(diào)試 step into/step out/step over 區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11python構(gòu)造函數(shù)init實(shí)例方法解析
這篇文章主要介紹了python構(gòu)造函數(shù)init實(shí)例方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Python學(xué)習(xí)之Django的管理界面代碼示例
這篇文章主要介紹了Python學(xué)習(xí)之Django的管理界面代碼示例,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-02-02Flask項(xiàng)目搭建配置項(xiàng)導(dǎo)入教程
這篇文章主要為大家介紹了Flask項(xiàng)目搭建配置項(xiàng)導(dǎo)入教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11python中的pygame實(shí)現(xiàn)接球小游戲
這篇文章主要介紹了python中的pygame實(shí)現(xiàn)接球小游戲,文章基于python的相關(guān)資料展開詳細(xì)的內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04詳解用Python實(shí)現(xiàn)自動(dòng)化監(jiān)控遠(yuǎn)程服務(wù)器
這篇文章主要介紹了用Python實(shí)現(xiàn)自動(dòng)化監(jiān)控遠(yuǎn)程服務(wù)器,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05