Pandas是一個強大的開源數據分析和操作庫。它可以幫助你對數據進行各種操作,並生成有關它的不同報告。我將把這篇文章分成兩篇
基本知識-我將在這個故事中介紹。我將介紹Pandas的基本功能,這些功能將使你大致了解如何開始使用Pandas,以及它如何幫助你節省大量時間。高級-將通過高級的功能,使它更容易解決複雜的分析問題。它將涵蓋的主題,如風格,繪圖,讀取多個文件等。第二部分仍在進行中,敬請期待。
在開始之前,確保你已經安裝了Pandas。如果沒有,你可以使用以下命令下載它。
# 如果你使用的是Anacondaconda install -c conda-forge pandas# 使用pip安裝Pandaspip install pandas# 導入pandasimport pandas as pd在這個練習中,我將使用著名的鐵達尼號數據集。我建議你從Github下載數據和notebook,將其複製到你的環境中:https://github.com/ankitgoel1602/data-science/tree/master/data-analysis/pandas
有關數據的更多詳細信息,請參閱Kaggle:https://www.kaggle.com/c/titanic/data?select=train.csv。
讓我們開始,我試圖保持數據分析的一般流程,比如從讀取數據開始,然後在數據分析過程中經歷不同的步驟。
1.使用read_csv或read_excel讀取數據
任何數據分析的起點都是獲取數據集。pandas提供不同的函數來讀取不同格式的數據。最常用的是
read_csv( )
這允許你讀取CSV文件。
pd.read_csv('path_to_your_csv_file.csv')panda提供了不同的選項來配置列名、數據類型或要讀取的行數。查看Pandas read_csv API了解更多詳細信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html。
read_excel( )
這允許你讀取Excel文件。
pd.read_excel('path_to_your_excel_file.xlsx')與CSV一樣,Pandas為read_excel提供了一組豐富的選項,允許你在excel中讀取特定的工作表名稱、數據類型或要讀取的行數。查看Pandas read_excel API了解更多詳細信息:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html
Pandas支持很多其他數據類型。如果你正在使用其他數據類型,請查看Pandas文檔:https://pandas.pydata.org/pandas-docs/stable/reference/io.html
讀取鐵達尼號數據集,我們將在這裡使用read_csv命令
# 你可以從提供的Github連結獲取它。# 將Titanic數據集加載到titanic_data中titanic_data = pd.read_csv('titanic_train.csv')這將創建一個Pandas數據幀(如表),並將其存儲到titanic_data中。
接下來,我們將了解如何獲取有關加載的數據的更多詳細信息。
2.使用head、tail或sample來探索數據。
一旦我們加載了數據,我們想回顧一下。panda提供了不同的api,我們可以使用它們來探索數據。
head( )
這類似於SQL中的TOP命令,從數據幀的開始給我們提供前'n'條記錄。
# 從數據幀中選擇前5(n=5)條記錄titanic_data.head(5)
tail( )
這給了我們數據幀末尾的「n」條記錄。
# 從數據幀中選擇最後5條(n=5)條記錄titanitc_data.tail(5)
sample( )
這將從數據中隨機獲取「n」個記錄。注意-此命令在不同運行時的輸出可能不同。
titanic_data.sample(5)
3.使用shape獲取數據維度
一旦我們有了數據,我們就需要知道我們要處理的行或列的數量,而Pandas的shape API提供的正是這些。讓我們看看
# dataframe的形狀,注意結尾沒有括號,因為它是dataframe的屬性titanic_data.shape(891, 12)4.使用info( )查看數據摘要
讓我們先看看這個的輸出
titanic_data.info()
正如你所看到的,「info」提供了一個很好的數據摘要,讓我們一個一個地了解它。
索引詳細信息-Pandas中的每個數據幀都有一個索引,如果你熟悉SQL,它就像是我們創建用來訪問數據的索引。這裡意味著我們有一個從0到890的範圍索引,即總共891行。「info」生成的表中的每一行都向我們提供了有關列的詳細信息、列中的值的數量以及pandas分配給它的數據類型。這對於了解缺失數據非常有用。例如我們可以說我們只有714行的「Age」數據。內存使用-Pandas將數據幀加載到內存中,這將告訴我們數據集使用了多少內存。當我們有大的數據集時,這就很方便了。pandas有一個特定的API「memory_usage」來獲得更多關於內存的信息。5.使用describe()的數據統計
這給了我們關於數據集的統計數據。如你所見,我們的數據幀如下所示
如你所見,它為每一列提供了許多信息,如記錄計數(不計算丟失的記錄,如年齡)、平均值、標準差、最小值和不同分位數百分比。默認情況下,此命令提供有關數值數據類型(如int或float)的信息。要獲取「object」列的統計信息,我們可以運行
# 顯示有關對象列的統計信息titanic_data.describe(include=['O'])
如果你注意到,我們在describe API中添加了'include'參數,它是一個列表,我們可以傳遞多個值,比如-
include=[『O』, 』int64']-將提供關於DataFrame中Object和int64類型列的統計信息。include=[『O』, 『float64』]-將提供關於DataFrame中Object和float64類型列的統計信息。與「include」類似,我們也可以使用「exclude」,它將在計算統計時排除列類型。如果你對更多細節感興趣,請參閱Pandas文檔:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.describe.html。
6.使用loc和iloc進行數據選擇
這些都是非常有用的函數,可以幫助我們選擇數據。使用這些我們可以選擇數據的任何部分。為了更好地理解它,讓我們更改數據的索引(如果你不理解,請不要擔心,我將在第2部分中討論)。
# 將數據幀的索引從RangeIndex更改為「Ticket」值titanic_ticket_index = titanic_data.set_index('Ticket')
loc( )
這將根據標籤(即列和行的名稱)選擇數據。例如,在上面的數據中,行標籤類似於A/5 21171, PC17599, 113803,列標籤類似於PassengerId, Survived, Sex。loc的一般語法是-
dataframe_name.loc[row_labels, column_labels(optional)]行標籤和列標籤可以採用不同的值。讓我們看一些例子來更好地理解它。
選擇單行
輸入你想要的行的標籤,即,如果我們想選擇'Ticket',其中的值是'A/5 21171'。
# 注意我們需要使用[]方括號# 這將返回與名稱匹配的行的數據。titanic_ticket_index.loc['A/5 21171']
選擇多行
很多時候,我們需要選擇多行,以便進一步分析。.loc API可以獲取要選擇的行標籤列表,即。
或者類似的
# 我們可以提供 start_label:end_label# 這裡我們選擇標籤為「PC 17599」到「373450」的行titanic_ticket_index.loc['PC 17599':'373450']
注意-如果多行具有相同的標籤,這將不起作用。
選擇單列
這與我們選擇行的方式類似,但是在選擇列時,我們需要告訴Pandas我們要選擇的行。我們可以用「:」代替行標籤,這意味著我們要選擇所有行。
# 為所有行選擇列。titanic_ticket_index.loc[:,'Embarked']
選擇多個列
與我們對多行所做的類似,只需要告訴Pandas我們正在選擇哪些行。
# 為所有行選擇Sex, Age, Fare, Embarked列 .titanic_ticket_index.loc[:,['Sex','Age','Fare','Embarked']]
或者類似的
# 我們可以提供start_label:end_label# 在這裡,我們選擇的列為 label 'Sex' 到 'Embarked'titanic_ticket_index.loc[:, 'Sex':'Embarked']
選擇特定的行和列
iloc()
這與loc類似,但基於索引而不是標籤選擇行和列。與標籤不同的是,索引總是從0開始,到第7行的數目是1,列的索引總是從0到第1列。
讓我們看一個例子
# 選擇特定的行和列:示例2# 對於列和行我們都可以用start_label:end_label# 選擇第3至第6行和第1至第4列# 結束索引應比所需的行或列大1titanic_ticket_index.iloc[3:7, 1:5]
在這裡,我們沒有像對「loc」那樣查看示例。如果你想知道我們是如何使用iloc實現同樣的結果的,你可以參考Github:https://github.com/ankitgoel1602/data-science/blob/master/data-analysis/pandas/pandas_basic_functions_overview.ipynb
7.在列中使用value_counts()獲取唯一值
Value_counts為我們提供列中唯一值的計數,這對於了解以下信息非常有用
列中有不同的值。最常見值。最頻繁值的比例。# Sex列的值計數。titanic_data['Sex'].value_counts()# 輸出male 577female 314Name: Sex, dtype: int64如你所見,我們的數據集包含了更多的男性。我們甚至可以將其標準化以查看值之間的分布。
# 為性別列計數並標準化titanic_data['Sex'].value_counts(normalize=True)#輸出male 0.647587female 0.352413Name: Sex, dtype: float64這意味著,在我們的數據集中,男性與女性的比例約為65:35。
8.使用query( )篩選數據
通常,我們使用難以分析的大型數據集。在這種情況下,策略是過濾不同條件下的數據並對其進行分析。我們只需使用Pandas查詢API的一行代碼就可以做到這一點。
讓我們舉幾個例子來更好地理解它。
選擇年齡>15的行。
# 前5個年齡大於15歲的記錄titanic_data.query('Age > 15').head(5)
選擇倖存的男性。
# 前5名倖存的男性titanic_data.query('Sex=="male" and Survived==1').head(5)
我們可以定義變量並使用它們來編寫過濾器查詢。當我們需要編寫腳本時,它會很方便。
# gender_to_select和min_fare,這些都可以作為參數的一部分傳遞給腳本gender_to_select = "female"min_fare = 50# 使用傳遞的屬性查詢titanic_data.query('(Sex==@gender_to_select) and (Fare > @min_fare)')
結論
我希望這篇文章能幫助你開始使用Pandas並簡化數據分析過程。如前所述,在本文中,我試圖涵蓋涉及數據分析過程不同領域的基本函數。我將繼續補充更多。
Pandas提供了許多不同的api,可以幫助對數據執行高級操作,如繪圖、風格等。我將在本系列的第2部分中介紹這些api。