-
1 # 小小猿愛嘻嘻
-
2 # 軟體測試開發技術棧
Pandas 是基於 NumPy的一種工具,該工具是為了解決資料分析任務而建立的。Pandas 納入了大量庫和一些標準的資料模型 ,提供了高效地操作大型資料集所需的工具。Pandas提供了大量能使我們快速便捷地處理資料的函式和方法。你很快就會發現,它是使Python成為強大而高效的資料分析環境的重要因素之一。資料載入型別總覽Pandas載入csv檔案
read_csv常用引數
header=None 指定第幾行作為列名(忽略註解行),如果沒有指定列名,預設header=0; 如果指定了列名header=Nonenames=指定列名,如果檔案中不包含header的行,應該顯性表示header=None,["A", "B", "C"] 自定義列名index_col=["A", "B"...] 給索引列指定名稱,如果是多重索引,可以傳listskiprows=[0,1,2] 忽略某幾行或者從開始算起的幾行,預設從檔案頭0開始skip_footer從檔案尾開始nrows=N 需要讀取的行數,前N行chunksize=M 返回迭代型別TextFileReader,每M條迭代一次sep="|"指定分割符,預設",",如果不指定引數,會自動解析,C引擎不能自動檢測分隔符,但Python解析引擎可以skip_blank_lines=False 預設為True,跳過空行,如果選擇不跳過,會填充NaNconverters={"col1", func} 對選定列使用函式func轉換,通常表示編號的列會使用(避免轉換成int)encoding: 編碼方式dtype: {‘a’: np.float64, ‘b’: np.int32} 指定資料型別Pandas載入Json檔案read_json引數
path_or_buf 就是json檔案路徑或者json格式的字串。orient 是表明預期的json字串格式。orient的設定有以下幾個值:split/index/columns/valuesorient 引數說明
split : dict like {index -> [index], columns -> [columns], data -> [values]}。由索引,列欄位、資料矩陣構成的json格式。key名稱只能是index、columns、data,dump.json檔案內容如下。示例程式碼如下:
records : list like [{column -> value}, ... , {column -> value}]。由列欄位為鍵,值為鍵值,每一個字典就構成了dataframe的一行資料,dump.json檔案內容如下。示例程式碼如下:
index : dict like {index -> {column -> value}}。以索引為鍵,以列欄位與值構成的字典為鍵值。dump.json檔案內容如下:示例程式碼如下:
columns : dict like {column -> {index -> value}}。由列為鍵,對應一個值字典的物件。這個字典物件以索引為鍵,以值為鍵值構成的json字串。dump.json檔案內容如下:示例程式碼如下:
values : just the values array。values這種我們就很常見了。就是一個巢狀的列表。裡面的成員也是列表,2層的。dump.json檔案內容如下示例程式碼如下:
Pandas載入Excel檔案read_excel的主要引數
io : excel文件路徑sheetname : 讀取的excel指定的sheet頁header :設定讀取的excel第一行是否作為列名稱skiprows : 省略指定行數的資料skip_footer :省略從尾部數的int行資料index_col :設定讀取的excel第一列是否作為行名稱names : 設定每列的名稱,陣列形式引數程式碼示例如下
-
3 # 52sissi
Python的pandas庫是使Python成為用於資料分析的出色程式語言的一件事。Pandas使匯入,分析和視覺化資料變得更加容易。它建立在NumPy和matplotlib之類的軟體包的基礎上,使您可以方便地進行大部分資料分析和視覺化工作。
當我們分析影片遊戲評論時,我們將瞭解關鍵的Pandas概念,例如索引。您可以繼續進行下去,並在我們的許多其他Python教程之一中或透過註冊Python Pandas課程來了解有關Python和Pandas的更多資訊。我們的許多其他資料科學課程也都使用Pandas。
謹記一下,本教程使用Python 3.5編寫,並使用Jupyter Notebook構建。您可能使用的是Python,pandas和Jupyter的更新版本,但結果應該基本相同。
用Pandas匯入資料
如果您正在使用本教程,則需要下載資料集,您可以在此處進行操作。
我們將採取的第一步是讀取資料。資料以逗號分隔的值或csv檔案儲存,其中每行用換行分隔,每列用逗號(,)分隔。這是ign.csv檔案的前幾行:
如您在上方看到的,檔案中的每一行代表一個遊戲,該遊戲已經過IGN審查。這些列包含有關該遊戲的資訊:
1)score_phrase— IGN如何用一個詞形容遊戲。這連結到它收到的分數。
2)title -遊戲名稱。
4)platform -審查遊戲的平臺(PC,PS4等)。
5)score—遊戲的得分,從1.0到10.0。
6)genre —遊戲型別。
7)editors_choice- N如果遊戲不是編輯選擇的Y話,那麼是。這與得分息息相關。
8)release_year -遊戲釋出的年份。
9)release_month -遊戲釋出的月份。
10)release_day -遊戲釋出的那天。
還有一個前導列,其中包含行索引值。我們可以放心地忽略此列,但稍後將深入探討哪些索引值。
為了在Python和pandas中有效地處理資料,我們需要將csv檔案讀取到Pandas DataFrame中。DataFrame是表示和處理表格資料的一種方式,表格資料是表格形式的資料,例如電子表格。表格資料具有行和列的格式,就像我們的csv檔案一樣,但是如果我們可以將其作為表格檢視,則對我們來說更易於閱讀和排序。
為了讀入資料,我們需要使用pandas.read_csv函式。此函式將接收一個csv檔案並返回一個DataFrame。以下程式碼將:
a.匯入pandas庫。我們將其重新命名為,pd以便更快地輸入。這是資料分析和資料科學中的標準約定,您經常會看到匯入的Pandas就像pd其他人的程式碼一樣。
b.讀ign.csv入一個DataFrame,並將結果分配給一個名為的新變數,reviews以便我們可以reviews用來引用我們的資料。
讀完DataFrame後,以更直觀的方式看一下我們所獲得的內容將很有幫助。Pandas方便地為我們提供了兩種方法,可以快速地將資料列印到表中。這些功能是:
1)DataFrame.head()—列印DataFrame的前N行,其中N是您作為引數傳遞給函式的數字,即DataFrame.head(7)。如果不傳遞任何引數,則預設值為5。
2)DataFrame.tail()—列印DataFrame的最後N行。同樣,預設值為5。
我們將使用該head方法檢視其中的內容reviews:
我們還可以訪問pandas.DataFrame.shape屬性,以檢視以下行reviews:
如我們所見,所有內容均已正確讀取-我們有18,625行和11列。
與類似的NumPy這樣的Python軟體包相比,使用Pandas的一大優勢是Pandas允許我們擁有具有不同資料型別的列。在我們的資料集中,reviews我們有儲存浮點值(如)score,字串值(如score_phrase)和整數(如)的列release_year,因此在此處使用NumPy會很困難,但Pandas和Python可以很好地處理它。
現在我們已經正確地讀取了資料,讓我們開始建立索引reviews以獲取所需的行和列。
用Pandas索引DataFrames
之前,我們使用了該head方法來列印的第一5行reviews。我們可以使用pandas.DataFrame.iloc方法完成同樣的事情。該iloc方法允許我們按位置檢索行和列。為此,我們需要指定所需行的位置以及所需列的位置。下面的程式碼將reviews.head()透過選擇行0到5,以及資料集中的所有列來複制我們的結果:
讓我們更深入地研究我們的程式碼:我們指定了想要的rows 0:5。這意味著我們想要從position 0到(但不包括)position的行5。
第一行被認為是在位置0,所以選擇行0:5給了我們行的位置0,1,2,3,和4。我們也需要所有列,並且使用快捷方式來選擇它們。它的工作方式是這樣的:如果我們不喜歡第一個位置值,例如:5,那是假設我們的意思0。如果我們忽略了最後一個位置值(如)0:,則假定我們是指DataFrame中的最後一行或最後一列。我們需要所有列,因此只指定了一個冒號(:),沒有任何位置。這使我們的列從0到最後一列。以下是一些索引示例以及結果:
1)reviews.iloc[:5,:]—第一5行,以及這些行的所有列。
2)reviews.iloc[:,:] —整個DataFrame。
3)reviews.iloc[5:,5:]—從位置5開始的行,從位置開始的列5。
4)reviews.iloc[:,0] —第一列,以及該列的所有行。
5)reviews.iloc[9,:] —第十行,以及該行的所有列。
在Pandas中使用標籤在Python中建立索引
既然我們知道如何按位置檢索行和列,那麼值得研究使用DataFrames的另一種主要方法,即按標籤檢索行和列。與NumPy相比,Pandas的主要優勢在於,每一列和每一行都有一個標籤。可以處理列的位置,但是很難跟蹤哪個數字對應於哪個列。
我們可以使用pandas.DataFrame.loc方法處理標籤,該方法允許我們使用標籤而不是位置進行索引。我們可以reviews使用以下loc方法顯示前五行:
上面的內容實際上與並沒有太大的不同reviews.iloc[0:5,:]。這是因為儘管行標籤可以採用任何值,但我們的行標籤與位置完全匹配。您可以在上方表格的最左側看到行標籤(它們以粗體顯示)。您還可以透過訪問DataFrame 的index屬性來檢視它們。我們將顯示的行索引reviews:
reviews.index
Int64Index([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, ...], dtype="int64")
不過,索引不一定總是與位置匹配。在下面的程式碼單元中,我們將:
a.獲取行10至行20的reviews,並分配結果some_reviews。
b.顯示的第一5行some_reviews。
如上所示,在中some_reviews,行索引始於,10結束於20。因此,嘗試loc使用小於10或大於的數字20將導致錯誤:
some_reviews.loc[9:21,:]
如前所述,在使用資料時,列標籤可以使工作變得更加輕鬆。我們可以在loc方法中指定列標籤,以按標籤而不是按位置檢索列。
我們還可以透過傳入列表來一次指定多個列:
Pandas系列物件
我們可以通過幾種不同的方式在Pandas中檢索單個列。到目前為止,我們已經看到了兩種語法:
1)reviews.iloc[:,1] —將檢索第二列。
2)reviews.loc[:,"score_phrase"] —還將檢索第二列。
還有第三種甚至更容易的方法來檢索整列。我們可以在方括號中指定列名稱,例如使用字典:
我們還可以透過以下方法使用列列表:
當我們檢索單個列時,實際上是在檢索Pandas Series物件。DataFrame儲存表格資料,而Series儲存資料的單列或單行。
我們可以驗證單個列是否為系列:
我們可以手動建立系列以更好地瞭解其工作原理。要建立一個Series,我們在例項化它時將一個列表或NumPy陣列傳遞給Series物件:
系列可以包含任何型別的資料,包括混合型別。在這裡,我們建立一個包含字串物件的系列:
在Pandas中建立一個DataFrame
我們可以透過將多個Series傳遞到DataFrame類中來建立DataFrame。在這裡,我們傳入剛剛建立的兩個Series物件,
s1作為第一行,s2作為第二行:
我們還可以使用列表列表完成同樣的事情。每個內部列表在結果DataFrame中被視為一行:
我們可以在建立DataFrame時指定列標籤:
以及行標籤(索引):
還請注意,不需要縮排和單獨的行。我們已經以這種方式編寫了程式碼,以使其更易於解析,但是您經常會遇到將它們全部寫成一行的情況。例如,以下程式碼將產生與我們在本段上方的表中看到的結果完全相同的結果:
無論如何,新增標籤後,便可以使用它們對DataFrame進行索引:
columns如果將字典傳遞給DataFrame建構函式,則可以跳過指定關鍵字引數的操作。這將自動設定列名稱:
PandasDataFrame方法
如前所述,pandas DataFrame中的每一列都是Series物件:
我們可以在Series物件上呼叫與在DataFrame上可以呼叫的大多數相同的方法,包括head:
Pandas Series和DataFrames還具有其他使計算更簡單的方法。例如,我們可以使用pandas.Series.mean方法來查詢Series的均值:
我們還可以呼叫類似的pandas.DataFrame.mean方法,該方法預設情況下將查詢DataFrame中每個數字列的平均值:
我們可以修改axis關鍵字引數以mean計算每行或每列的平均值。預設情況下,axis等於0,並將計算每列的平均值。我們還可以將其設定1為計算每行的平均值。請注意,這隻會計算每行中數值的平均值:
reviews.mean(axis=1)
0 510.500
1 510.500
2 510.375
3 510.125
4 510.125
5 509.750
6 508.750
7 510.250
8 508.750
9 509.750
10 509.875
11 509.875
12 509.500
13 509.250
14 509.250
...
18610 510.250
18611 508.700
18612 509.200
18613 508.000
18614 515.050
18615 515.050
18616 508.375
18617 508.600
18618 515.025
18619 514.725
18620 514.650
18621 515.000
18622 513.950
18623 515.000
18624 515.000
Length: 18625, dtype: float64
Series和DataFrames上有很多類似的方法mean。這裡有一些方便的東西:
1)pandas.DataFrame.corr —查詢DataFrame中各列之間的相關性。
2)pandas.DataFrame.count —計算每個DataFrame列中非空值的數量。
3)pandas.DataFrame.max —在每一列中找到最大值。
4)pandas.DataFrame.min —查詢每一列中的最小值。
5)pandas.DataFrame.median —查詢每列的中位數。
6)pandas.DataFrame.std —查詢每列的標準偏差。
例如,我們可以使用該corr方法檢視是否有任何列與關聯score。這可以告訴我們最近釋出的遊戲獲得了更高的評價(release_year),還是在年底之前釋出的遊戲獲得了更好的評分(release_month):
DataFrame Math與Pandas
我們還可以使用pandas在Python中的Series或DataFrame物件上執行數學運算。例如,我們可以將score列中的每個值除以2以將刻度從0– 切換10到0– 5:
reviews["score"] / 2
0 4.50
1 4.50
2 4.25
3 4.25
4 4.25
5 3.50
6 1.50
7 4.50
8 1.50
9 3.50
10 3.75
11 3.75
12 3.50
13 4.50
14 4.50
...
18610 3.00
18611 2.90
18612 3.90
18613 4.00
18614 4.60
18615 4.60
18616 3.75
18617 4.20
18618 4.55
18619 3.95
18620 3.80
18621 4.50
18622 2.90
18623 5.00
18624 5.00
Name: score, Length: 18625, dtype: float64
所有常用的數學運算子在Python的工作,如+,-,*,/,和^將在系列或DataFrames大Pandas的工作,並且將適用於每一個元素在一個數據幀或一個系列。
Pandas中的布林索引
現在我們已經瞭解了一些Pandas的基礎知識,讓我們繼續進行分析。我們前面看到的,平均都在值的score列reviews左右7。如果我們想找到所有得分都高於平均水平的遊戲怎麼辦?
我們可以先進行比較。比較會將“系列”中的每個值與指定值進行比較,然後生成一個“系列”,其中包含表示比較狀態的布林值。使用Python Pandas分析影片遊戲資料https://www.aaa-cg.com.cn/data/2310.html例如,我們可以看到哪些行的score值大於7:
score_filter = reviews["score"] > 7
score_filter
0 True
1 True
2 True
3 True
4 True
5 False
6 False
7 True
8 False
9 False
10 True
11 True
12 False
13 True
14 True...
18610 False
18611 False
18612 True
18613 True
18614 True
18615 True
18616 True
18617 True
18618 True
18619 True
18620 True
18621 True
18622 False
18623 True
18624 True
Name: score, Length: 18625, dtype: bool
有了布林系列後,我們可以使用它來選擇DataFrame中該系列包含value的行True。所以,我們只能選擇行reviews,其中score大於7:
可以使用多個條件進行過濾。假設我們要查詢針對發行Xbox One的得分超過的遊戲7。在下面的程式碼中,我們:
a.設定兩個條件的過濾器:
1)檢查是否score大於7。
2)檢查是否platform相等Xbox One
b.應用過濾器以reviews僅獲取所需的行。
c.使用head方法列印的第一5行filtered_reviews。
在使用多個條件進行過濾時,將每個條件放在括號中並用一個&符號(&)分隔是很重要的。
Pandas圖
現在我們知道如何過濾,我們可以建立圖以觀察的回顧分佈Xbox One與的回顧分佈PlayStation 4。這將幫助我們確定哪個控制檯具有更好的遊戲。
我們可以透過直方圖來做到這一點,該直方圖將繪製不同得分範圍內的頻率。我們可以使用pandas.DataFrame.plot方法為每個控制檯製作一個直方圖。該方法利用幕後的流行Python繪相簿matplotlib生成美觀的繪圖。
該plot方法預設為繪製折線圖。我們需要傳入關鍵字引數kind="hist"來繪製直方圖。在下面的程式碼中,我們:
a.致電%matplotlib inline以在Jupyter筆記本中設定繪圖。
b.過濾reviews以僅包含有關的資料Xbox One。
c.繪製score列。
我們也可以對PS4:
從我們的直方圖中可以看出,與相比,PlayStation 4具有更高評級的遊戲Xbox One。
顯然,這只是冰山一角,涉及到我們可以用來分析該資料集的潛在方向,但我們已經有了一個很好的開端:我們已經使用Python和pandas匯入了資料集,並學會了使用各種不同的索引方法選擇我們想要的資料點,並進行了一些快速的探索性資料分析,以回答我們開始時遇到的問題。
https://www.toutiao.com/i6832518344541733380/
回覆列表
這個非常簡單,pandas內建了大量函式和型別,可以快速處理日常各種檔案,下面我以txt,excel,csv,json和mysql這5種類型檔案為例,簡單介紹一下pandas是如何快速讀取這些檔案的:
txt檔案這是最常見的一種文字檔案格式,讀取的話,直接使用read_table函式就行,測試程式碼如下,這裡必須保證txt檔案是格式化的,不然讀取的結果會有誤,filename是檔名,header是否包含列標題,sep是每行資料的分隔符,最終讀取的資料型別是DataFrame,方便後面程式進行處理:
excel檔案這也是一種比較常見的檔案格式,讀取的話,直接使用read_excel函式就行,測試程式碼如下,非常簡單,直接傳入檔名就行,最終返回結果也是DataFrame型別:
csv檔案這也是一種比較常見的檔案格式,讀取的話,直接使用read_csv函式就行,測試程式碼如下,也非常簡單,filename為檔名,header為是否包含列標題,最終返回結果也是DataFrame型別:
json檔案這也是一種比較常用的資料儲存格式,讀取的話,直接使用read_json函式就行,測試程式碼如下,filename為檔名,如果出現中文亂碼的話,設定encoding編碼為uft-8就行,最終結果也是DataFrame型別:
mysql這裡首先需要安裝sqlalchemy框架,之後才能藉助read_sql_query函式直接從mysql資料庫讀取資料,安裝的話,直接輸入命令“pip install sqlalchemy”就行,測試程式碼如下,也非常簡單,先建立一個connect連線,然後根據sql查詢語句,直接從資料庫中讀取資料就行:
至此,我們就完成了利用python的pandas模組來讀取txt,excel,csv,json和mysql這5種類型檔案的資料。總的來說,pandas這個模組功能非常強大,尤其對於資料處理來說,可以說是一個利器,在資料分析與處理中經常會用到,只要你熟悉一下相關文件和示例,很快就能掌握的,網上也有相關資料和教程,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。