精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
數據科學 | Pandas數據分析入門

作者:佘亮

數據處理是數據分析的核心部分,通過爬蟲或者實際生產過程中初步獲取的數據通常具有很多的“垃圾數據”,比如重復數據或者值缺失,不連續數據等等。這時就需要對數據首先進行篩選,補全等“清洗”操作。

數據處理是數據分析的核心部分,通過爬蟲或者實際生產過程中初步獲取的數據通常具有很多的“垃圾數據”,比如重復數據或者值缺失,不連續數據等等。這時就需要對數據首先進行篩選,補全等“清洗”操作。除此之外,“清洗”好的數據也需要根據不同的用途來進行轉換,以適應分析,預測或者可視化的需求。

數據的處理的軟件包有很多,在python中主要應用Pandas來進行處理。Pandas是一個十分成熟的數據處理包,熟練掌握可以高效并且方便地將數據進行轉換和清洗,本節主要整理了pandas的一些基本技能和實用技巧,為勵志成為數據分析師的你鋪路搭橋。

以下是本教程的總體提綱,這篇文章首先對pandas的基本操作進行介紹,其他內容敬請期待后續的文章。另附上我征稿通知的鏈接:數據科學 | 『運籌OR帷幄』數據分析、可視化、爬蟲系列教程征稿

一 數據分析相關python包介紹

  • 常用數據分析庫NumPy, Pandas, SciPy, statssmodels, scikit-learn, NLTK的簡介與安裝

  • 數據分析開發環境搭建

二 數據的導入與導出

  • 讀取csv數據

  • 讀取mysql數據

三 數據提取與篩選

  • 常見的數據格式與形態

  • Python對不同形式數據的讀寫

四 數據清洗處理

  • 如何對數據進行清洗

  • Pandas基本數據結構與功能

  • Pandas統計相關功能

  • Pandas缺失數據處理

  • Pandas層次化索引

  • Pandas DataFrame

五 高性能科學計算和數據分析的基礎包Numpy

  • NumPy的性能優勢

  • 數組對象處理

  • 文件輸入輸出

  • 線性代數相關功能

  • 高效操作實踐

六 統計分析

  • 線性回歸

  • 邏輯回歸

  • SVM

  • K緊鄰算法

  • 神經網絡

  • 機器學習庫Scikit-Learn與應用

  • 使用NLTK進行Python文本分析

  • Python深度學習keras入門

Pandas入門

Pandas 是基于 NumPy 的一個開源 Python 庫,它被廣泛用于數據分析,以及數據清洗和準備等工作。數據科學家經常和表格形式的數據(比如.csv、.tsv、.xlsx)打交道。Pandas可以使用類似SQL的方式非常方便地加載、處理、分析這些表格形式的數據。搭配Matplotlib和Seaborn效果更好。

pandas可以滿足以下需求:

  • 具備按軸自動或顯式數據對齊功能的數據結構。這可以防止許多由于數據未對齊以及來自不同數據源(索引方式不同)的數據而導致的常見錯誤、集成時間序列功能、既能處理時間序列數據也能處理非時間序列數據的數據結構、數學運算和簡約(比如對某個軸求和)可以根據不同的元數據(軸編號)執行、

  • 靈活處理缺失數據、

  • 在實際構建任何模型之前,任何機器學習項目中的大量時間都必須花費在準備數據、

  • 分析基本趨勢和模式上。因此需要Pandas來進行處理。

下面我們開始今天的學習之旅。

Pandas的安裝與導入

首先,在使用Pandas前,必須安裝Pandas。如果你安裝過Anaconda,就可以執行如下命令安裝Pandas:

conda install pandas

如果沒有安裝Anaconda,也沒有關系,可以使用Python的pip命令來安裝:

pip install pandas

注意:pandas安裝會用到numpy庫,因此在安裝pandas之前一定要安裝好numpy。

導入:為了簡便,這里使用pd作為pandas的縮寫,因為pandas依賴numpy,所以在使用之前需要安裝和導入numpy

import numpy as np

import pandas as pd

打印pandas的版本

pd.__version__

考慮如下的Python字典數據和Python列表標簽:

data = {'animal': ['cat', 'cat', 'snake', 'dog', 'dog', 'cat', 'snake', 'cat', 'dog', 'dog'],

'age': [2.5, 3, 0.5, np.nan, 5, 2, 4.5, np.nan, 7, 3],

'visits': [1, 3, 2, 3, 2, 3, 1, 1, 2, 1],

'priority': ['yes', 'yes', 'no', 'yes', 'no', 'no', 'no', 'yes', 'no', 'no']}

labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

Pandas數據結構介紹

Pandas有兩個數據結構:Series和DataFrame。

  • Series是一種類似于以為NumPy數組的對象,它由一組數據(各種NumPy數據類型)和與之相關的一組數據標簽(即索引)組成的。可以用index和values分別規定索引和值。如果不規定索引,會自動創建 0 到 N-1 索引。

  • DataFrame是一種表格型結構,含有一組有序的列,每一列可以是不同的數據類型。既有行索引,又有列索引。

pd.DataFrame:創建pandas矩陣

pd.Series 創建pandas列表

1.從具有索引標簽的字典數據創建一個DataFrame df.

df = pd.DataFrame(data,index = labels)

返回DataFrame的前三行

df.iloc[:3]

df.head(3)

運行結果如下:

2.從numpy 數組構造DataFrame

df2 = pd.DataFrame(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]),columns=['a', 'b', 'c'])

df2

運行結果如下

3.通過其他DataFrame來創建DataFrame df3

df3 = df2[['a','b','c']].copy()

df3

運行結果如下:

4.從csv文件中每隔n行來創建Dataframe

df = pd.read_csv('https://raw.githubusercontent.com/selva86/datasets/master/BostonHousing.csv', chunksize=50)

df2 = pd.DataFrame()

5.用Series創建DataFrame

s_1 = pd.Series(data['animal'])

s_2 = pd.Series(data['age'])

s_3 = pd.Series(data['visits'])

s_4 = pd.Series(data['priority'])

pd_2 = pd.DataFrame([s_1,s_2,s_3,s_4])

pd_2

運行結果如下:

Pandas處理NaN值

dropna(axis=, how=):丟棄NaN數據,{axis:0(按行丟棄),1(按列丟棄)} {how:'any'(只要含有NaN數據就丟棄),'all'(所有數據都為NaN時丟棄)}

fillna(value=):將NaN值都設置為value的值

isnull():對每各元素進行判斷是否是NaN,返回結果矩陣

np.any(matrix) == value:判斷matrix矩陣中是否有value值

np.all(matrix) == value:判斷matrix矩陣中是否所有元素都是value值

Pandas讀取數據、導出數據

根據數據的格式,pandas提供了多種數據讀取和導出的方法,如:

讀取數據:read_csv、read_table、read_fwf、read_clipboard、read_excel、read_hdf

導出數據:to_csv、to_table、to_fwf、to_clipboard、to_excel、to_hdf

df = pd.read_csv('Q1.csv')

print(df)

df.to_csv('Q1_pandas.csv')

Pandas合并數據

concat方法是拼接函數,有行拼接和列拼接,默認是行拼接,拼接方法默認是外拼接(并集),拼接對象是pandas數據類型。

第一個參數:需要合并的矩陣

axis:合并維度,0:按行合并,1:按列合并

join:處理非公有 列/行 的方式,inner:去除非公有的 列/行,outer:對非公有的 列/行 進行NaN值填充然后合并

ignore_index:是否重排行索引

df1 = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D'], index=[0, 1, 2])

df2 = pd.DataFrame(np.ones((3, 4)), columns=['B', 'C', 'D', 'E'], index=[1, 2, 3])

print(pd.concat([df1, df2], join='outer', ignore_index=True)) # join = {'outer', 'inner'}

print(pd.concat([df1, df2], axis=1, join_axes=[df1.index]))

print(df1.append([df2], ignore_index=True))

append方法在index方向連接兩個DataFrame或者對DataFrame進行擴展

append 方法可以直接用list對DataFrame進行擴展。

df = pd.DataFrame([[1, 2], [3, 4]])

df = df.append([[1,2]])

print(df)

運行結果:

或者也可以將兩個DataFrame連接起來。

df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))

df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))

df = df.append(df2)

print(df)

運行結果:

需要注意的是,append方法并不能像list的append方法一樣對原來的df繼續修改,而是建立了一個新的對象。如果要修改df,那么需要重新對df賦值,所以append的方法執行效率并不是很高。

Join方法 是基于Index連接DataFrame,連接方法有內連接、外連接(左連接和右連接)

caller = pd.DataFrame({'key':['A0','A1','A2','A3','A4','A5'],'B':['B0','B1','B2','B3','B4','B5']})

other = pd.DataFrame({'key':['A0','A1','A2'],'C':['C0','C1','C2']})

caller.join(other,lsuffix='_caller',rsuffix='_other',how='inner')

運行結果如下:

另外,還有一種merge方法與Join方法類似,不過語法略有不同。

通過on連接兩個數據集的相同列,how表示連接的方式也有內連接、外連接(左連接和右連接)

使用merge方式要求合并的兩個DataFrame需要有兩數據集有一個相同列(不要求數值完全相同),繼續以上面數據為例,對比下區別

df = pd.merge(caller,other,on = ['key'],how = 'inner')

運行結果如下:

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
加速數據分析,這12種高效Numpy和Pandas函數為你保駕護航
用過都說好!12個Pandas和NumPy函數,讓你處理數據更輕松
利用程序監聽股票的數據分析
關于數據分析中NumPy,Pandas,看完這一篇基本夠了
推薦收藏!3.5萬字圖解 Pandas!
pandas DataFrame數據重命名列名的幾種方式
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 临清市| 翁源县| 平凉市| 介休市| 永仁县| 杭州市| 石泉县| 通河县| 隆德县| 黄山市| 闸北区| 若尔盖县| 榆社县| 平阳县| 益阳市| 泾源县| 应用必备| 光山县| 夏河县| 柏乡县| 绥中县| 简阳市| 鄯善县| 台北县| 社会| 汝南县| 修文县| 嵩明县| 华坪县| 甘孜县| 新河县| 汽车| 昌图县| 南城县| 海宁市| 齐齐哈尔市| 屏东市| 曲靖市| 东莞市| 珠海市| 丹江口市|