歡迎來(lái)到寫(xiě)代碼那些事 !數(shù)據(jù)是現(xiàn)代應(yīng)用程序的核心,而Python中的DataFrame是處理和分析數(shù)據(jù)的強(qiáng)大工具之一。無(wú)論你是數(shù)據(jù)分析師、數(shù)據(jù)科學(xué)家還是開(kāi)發(fā)人員,掌握DataFrame的使用將大大提高你的數(shù)據(jù)處理能力。本教程將引導(dǎo)你深入學(xué)習(xí)Python中DataFrame的各種用法,從基礎(chǔ)到高級(jí),讓你能夠輕松處理和分析各種數(shù)據(jù)集。 介紹DataFrame
什么是DataFrame?DataFrame 是一個(gè)關(guān)鍵的數(shù)據(jù)結(jié)構(gòu),用于在Python中處理和分析數(shù)據(jù)。它是pandas庫(kù)(一個(gè)用于數(shù)據(jù)分析的Python庫(kù))的核心組件之一。 DataFrame可以被看作是一個(gè)類(lèi)似于電子表格或SQL表的二維數(shù)據(jù)結(jié)構(gòu),其中數(shù)據(jù)以表格的形式排列,并且具有行和列的標(biāo)簽。每一列可以包含不同類(lèi)型的數(shù)據(jù),例如整數(shù)、浮點(diǎn)數(shù)、字符串等,而且每一行都有一個(gè)唯一的索引。 DataFrame的特點(diǎn)包括:
DataFrame是數(shù)據(jù)科學(xué)家和分析師的利器,因?yàn)樗軌蜉p松處理和分析結(jié)構(gòu)化數(shù)據(jù),例如CSV文件、數(shù)據(jù)庫(kù)查詢(xún)結(jié)果等。 為什么要使用DataFrame?使用DataFrame有以下好處:
安裝和導(dǎo)入pandas庫(kù)要開(kāi)始使用DataFrame,你需要首先安裝并導(dǎo)入pandas庫(kù)。以下是安裝和導(dǎo)入pandas庫(kù)的步驟: 步驟 1:安裝pandas庫(kù)你可以使用pip(Python包管理器)來(lái)安裝pandas。打開(kāi)終端或命令提示符,并運(yùn)行以下命令: pip install pandas 步驟 2:導(dǎo)入pandas庫(kù)一旦安裝了pandas,你可以在Python腳本或Jupyter Notebook中導(dǎo)入它:
通常,pandas庫(kù)被約定為使用pd作為別名,以便在代碼中更容易地引用它的函數(shù)和類(lèi)。 安裝并導(dǎo)入pandas庫(kù)后,你就可以開(kāi)始創(chuàng)建和操作DataFrame以進(jìn)行數(shù)據(jù)分析和處理 創(chuàng)建DataFrame
從列表和字典創(chuàng)建DataFrame在pandas中,你可以輕松地從Python列表和字典創(chuàng)建DataFrame。下面是從列表和字典創(chuàng)建DataFrame的示例代碼以及相關(guān)注釋?zhuān)?/p> import pandas as pd# 創(chuàng)建一個(gè)包含列表的字典data = { 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'San Francisco', 'Los Angeles']}# 使用字典創(chuàng)建DataFramedf_from_dict = pd.DataFrame(data)# 創(chuàng)建一個(gè)包含列表的列表data_list = [ ['Alice', 25, 'New York'], ['Bob', 30, 'San Francisco'], ['Charlie', 35, 'Los Angeles']]# 指定列名創(chuàng)建DataFramecolumns = ['Name', 'Age', 'City']df_from_list = pd.DataFrame(data_list, columns=columns)# 打印兩個(gè)DataFrameprint('DataFrame from Dictionary:')print(df_from_dict)print('\nDataFrame from List:')print(df_from_list) 上述代碼中,首先創(chuàng)建了一個(gè)包含字典和列表數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),然后分別使用這兩種數(shù)據(jù)結(jié)構(gòu)創(chuàng)建了兩個(gè)DataFrame。字典中的鍵('Name'、'Age'、'City')成為了DataFrame的列名。 從外部數(shù)據(jù)源導(dǎo)入DataFramepandas支持從多種外部數(shù)據(jù)源導(dǎo)入數(shù)據(jù),如CSV文件、Excel文件、SQL數(shù)據(jù)庫(kù)等。以下是從CSV文件導(dǎo)入數(shù)據(jù)創(chuàng)建DataFrame的示例:
上述代碼中,我們使用pd.read_csv()函數(shù)從一個(gè)CSV文件導(dǎo)入數(shù)據(jù)并創(chuàng)建一個(gè)DataFrame。你只需提供CSV文件的路徑即可。同樣,你也可以使用pd.read_excel()來(lái)導(dǎo)入Excel文件,或使用pd.read_sql()來(lái)從數(shù)據(jù)庫(kù)中導(dǎo)入數(shù)據(jù)。 DataFrame的基本屬性DataFrame具有多個(gè)屬性,可以幫助你了解數(shù)據(jù)的基本信息。以下是一些常用的DataFrame屬性和示例代碼: import pandas as pd# 創(chuàng)建一個(gè)示例DataFramedata = { 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'San Francisco', 'Los Angeles']}df = pd.DataFrame(data)# 查看前幾行數(shù)據(jù),默認(rèn)顯示前5行print('Head of DataFrame:')print(df.head())# 查看DataFrame的形狀(行數(shù)和列數(shù))shape = df.shapeprint('\nDataFrame Shape:', shape)# 查看DataFrame的列名columns = df.columnsprint('\nDataFrame Columns:', columns)# 查看DataFrame的數(shù)據(jù)類(lèi)型信息data_types = df.dtypesprint('\nData Types:')print(data_types)# 查看DataFrame的統(tǒng)計(jì)摘要信息summary = df.describe()print('\nSummary Statistics:')print(summary) 上述代碼中,我們首先創(chuàng)建了一個(gè)示例DataFrame,然后使用不同的屬性來(lái)查看數(shù)據(jù)的頭部、形狀、列名、數(shù)據(jù)類(lèi)型和統(tǒng)計(jì)摘要信息。這些屬性可以幫助你更好地了解和分析數(shù)據(jù)。 這些是從列表和字典創(chuàng)建DataFrame、從外部數(shù)據(jù)源導(dǎo)入DataFrame以及DataFrame的基本屬性的示例。DataFrame是pandas庫(kù)的核心數(shù)據(jù)結(jié)構(gòu),具有強(qiáng)大的數(shù)據(jù)處理和分析功能 數(shù)據(jù)操作與篩選
選擇列和行在DataFrame中,你可以使用不同的方法選擇列和行。以下是一些示例代碼和注釋?zhuān)菔救绾螆?zhí)行這些操作:
上述代碼中,我們首先創(chuàng)建了一個(gè)示例DataFrame,然后使用不同的方法選擇列和行。df['ColumnName']選擇單列,df[['Column1', 'Column2']]選擇多列,而df.iloc[index]和df.loc[label]選擇單行,df.iloc[start:end]和df.loc[[label1, label2]]選擇多行。 條件篩選條件篩選允許你根據(jù)某些條件選擇DataFrame中的行。以下是一個(gè)示例代碼和注釋?zhuān)菔救绾螆?zhí)行條件篩選: import pandas as pd# 創(chuàng)建一個(gè)示例DataFramedata = { 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'San Francisco', 'Los Angeles']}df = pd.DataFrame(data)# 條件篩選,選擇年齡大于等于30的行filtered_df = df[df['Age'] >= 30]print('Filtered DataFrame:')print(filtered_df) 在上述代碼中,我們使用條件篩選來(lái)選擇年齡大于等于30的行。你可以在篩選中使用各種條件和邏輯運(yùn)算符來(lái)滿(mǎn)足你的需求。 添加和刪除列你可以輕松地添加新列到DataFrame,也可以刪除現(xiàn)有列。以下是一些示例代碼和注釋?zhuān)菔救绾螆?zhí)行這些操作:
在上述代碼中,我們首先使用df['NewColumnName']語(yǔ)法添加新列到DataFrame,然后使用df.drop(columns=['ColumnName'])來(lái)刪除指定的列。請(qǐng)注意,刪除列時(shí)需要使用inplace=True來(lái)使修改生效。 數(shù)據(jù)排序你可以對(duì)DataFrame中的數(shù)據(jù)進(jìn)行排序,以便按特定列的值對(duì)行進(jìn)行排序。以下是一個(gè)示例代碼和注釋?zhuān)菔救绾螆?zhí)行數(shù)據(jù)排序操作: import pandas as pd# 創(chuàng)建一個(gè)示例DataFramedata = { 'Name': ['Alice', 'Bob', 'Charlie'], 'Age': [25, 30, 35], 'City': ['New York', 'San Francisco', 'Los Angeles']}df = pd.DataFrame(data)# 按年齡升序排序sorted_df = df.sort_values(by='Age')print('DataFrame Sorted by Age (Ascending):')print(sorted_df)# 按年齡降序排序sorted_df_desc = df.sort_values(by='Age', ascending=False)print('\nDataFrame Sorted by Age (Descending):')print(sorted_df_desc) 在上述代碼中,我們使用df.sort_values(by='ColumnName')對(duì)DataFrame進(jìn)行升序排序,并可以使用ascending=False參數(shù)來(lái)進(jìn)行降序排序。 這些是選擇列和行、條件篩選、添加和刪除列以及數(shù)據(jù)排序的示例。DataFrame提供了豐富的數(shù)據(jù)操作功能,使你能夠輕松地處理和分析數(shù)據(jù)。 數(shù)據(jù)分組與聚合
分組操作在DataFrame中,分組操作是一個(gè)強(qiáng)大的功能,可以讓你根據(jù)一個(gè)或多個(gè)列的值將數(shù)據(jù)集分成多個(gè)小組,并對(duì)每個(gè)小組應(yīng)用各種操作。以下是一個(gè)示例代碼和注釋?zhuān)菔救绾螆?zhí)行分組操作:
在上述代碼中,我們首先創(chuàng)建了一個(gè)示例DataFrame,然后使用groupby()方法根據(jù)城市對(duì)數(shù)據(jù)進(jìn)行分組。接下來(lái),我們使用mean()函數(shù)計(jì)算了每個(gè)城市的平均工資。這樣,你可以輕松地對(duì)不同分組的數(shù)據(jù)執(zhí)行各種操作,如計(jì)算統(tǒng)計(jì)信息、應(yīng)用自定義函數(shù)等。 聚合函數(shù)在DataFrame的分組操作中,聚合函數(shù)是常用的工具,它允許你對(duì)每個(gè)分組應(yīng)用匯總計(jì)算,例如求和、平均值、最大值、最小值等。以下是一些示例代碼和注釋?zhuān)菔救绾问褂镁酆虾瘮?shù): import pandas as pd# 創(chuàng)建一個(gè)示例DataFramedata = { 'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'], 'City': ['New York', 'San Francisco', 'Los Angeles', 'New York', 'San Francisco'], 'Salary': [50000, 60000, 75000, 48000, 70000]}df = pd.DataFrame(data)# 根據(jù)城市分組并計(jì)算每個(gè)城市的總工資city_groups = df.groupby('City')city_total_salary = city_groups['Salary'].sum()print('Total Salary by City:')print(city_total_salary)# 同時(shí)計(jì)算多個(gè)聚合函數(shù)city_aggregated = city_groups['Salary'].agg(['sum', 'mean', 'max', 'min'])print('\nAggregated Data by City:')print(city_aggregated) 在上述代碼中,我們首先使用groupby()方法根據(jù)城市對(duì)數(shù)據(jù)進(jìn)行分組,然后使用agg()方法應(yīng)用多個(gè)聚合函數(shù),如sum、mean、max和min,以獲得有關(guān)每個(gè)城市的聚合統(tǒng)計(jì)信息。 數(shù)據(jù)透視表數(shù)據(jù)透視表是一種用于在DataFrame中匯總和分析數(shù)據(jù)的強(qiáng)大工具,它允許你根據(jù)一個(gè)或多個(gè)列的值將數(shù)據(jù)進(jìn)行重排,并對(duì)交叉項(xiàng)應(yīng)用聚合函數(shù)。以下是一個(gè)示例代碼和注釋?zhuān)菔救绾蝿?chuàng)建數(shù)據(jù)透視表:
在上述代碼中,我們使用pd.pivot_table()函數(shù)創(chuàng)建了一個(gè)數(shù)據(jù)透視表,其中values參數(shù)指定了要分析的值列(Salary),index參數(shù)指定了用于分組的列(City),aggfunc參數(shù)指定了應(yīng)用于聚合的函數(shù)(這里是mean)。數(shù)據(jù)透視表可以讓你輕松地匯總和分析數(shù)據(jù),以獲得有關(guān)數(shù)據(jù)的見(jiàn)解。 這些是分組操作、聚合函數(shù)和數(shù)據(jù)透視表的示例。它們是數(shù)據(jù)分析中非常常用的工具,可幫助你深入了解和分析大量的數(shù)據(jù)。 數(shù)據(jù)清洗與處理
處理缺失值在數(shù)據(jù)分析和處理中,經(jīng)常會(huì)遇到缺失值(NaN或None),它們可能是由于數(shù)據(jù)采集或處理錯(cuò)誤而產(chǎn)生的。pandas提供了多種方法來(lái)處理缺失值。以下是一些示例代碼和注釋?zhuān)菔救绾翁幚砣笔е担?/p> import pandas as pdimport numpy as np# 創(chuàng)建一個(gè)包含缺失值的示例DataFramedata = { 'Name': ['Alice', 'Bob', 'Charlie', None, 'Eve'], 'Age': [25, None, 35, 28, 30], 'Salary': [50000, 60000, None, 48000, 70000]}df = pd.DataFrame(data)# 檢測(cè)缺失值missing_data = df.isnull()print('Missing Data:')print(missing_data)# 刪除包含缺失值的行df_dropna = df.dropna()print('\nDataFrame after Dropping Missing Values:')print(df_dropna)# 填充缺失值df_fillna = df.fillna({'Name': 'Unknown', 'Age': df['Age'].mean(), 'Salary': 0})print('\nDataFrame after Filling Missing Values:')print(df_fillna) 在上述代碼中,我們首先創(chuàng)建了一個(gè)示例DataFrame,其中包含了缺失值。然后,我們使用isnull()函數(shù)檢測(cè)缺失值,dropna()函數(shù)刪除包含缺失值的行,以及fillna()函數(shù)填充缺失值,可以根據(jù)需要指定填充值。 數(shù)據(jù)類(lèi)型轉(zhuǎn)換在DataFrame中,你可以執(zhí)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換以確保數(shù)據(jù)的一致性和正確性。以下是一些示例代碼和注釋?zhuān)菔救绾螆?zhí)行數(shù)據(jù)類(lèi)型轉(zhuǎn)換:
在上述代碼中,我們首先創(chuàng)建了一個(gè)示例DataFrame,其中包含字符串類(lèi)型的Age和Salary列。然后,我們使用astype()函數(shù)將這兩列轉(zhuǎn)換為整數(shù)類(lèi)型。這種類(lèi)型轉(zhuǎn)換可以確保數(shù)據(jù)以正確的方式進(jìn)行計(jì)算和分析。 數(shù)據(jù)合并與連接在數(shù)據(jù)分析中,通常需要將不同的數(shù)據(jù)集合并或連接在一起,以便進(jìn)行更全面的分析。pandas提供了多種方法來(lái)執(zhí)行數(shù)據(jù)合并和連接。以下是一些示例代碼和注釋?zhuān)菔救绾螆?zhí)行數(shù)據(jù)合并和連接操作: import pandas as pd# 創(chuàng)建兩個(gè)示例DataFramedata1 = { 'ID': [1, 2, 3], 'Name': ['Alice', 'Bob', 'Charlie']}data2 = { 'ID': [2, 3, 4], 'Salary': [50000, 60000, 75000]}df1 = pd.DataFrame(data1)df2 = pd.DataFrame(data2)# 合并兩個(gè)DataFrame(基于共同的列)merged_df = pd.merge(df1, df2, on='ID')print('Merged DataFrame:')print(merged_df)# 連接兩個(gè)DataFrame(按行或列連接)concatenated_rows = pd.concat([df1, df2], axis=0)concatenated_columns = pd.concat([df1, df2], axis=1)print('\nConcatenated DataFrames (Rows):')print(concatenated_rows)print('\nConcatenated DataFrames (Columns):')print(concatenated_columns) 在上述代碼中,我們首先創(chuàng)建了兩個(gè)示例DataFrame,然后使用pd.merge()函數(shù)將它們合并在一起,通過(guò)指定共同的列(這里是'ID'列)。另外,我們使用pd.concat()函數(shù)將兩個(gè)DataFrame按行或列連接在一起。 這些是處理缺失值、數(shù)據(jù)類(lèi)型轉(zhuǎn)換以及數(shù)據(jù)合并和連接的示例。它們是數(shù)據(jù)分析和數(shù)據(jù)清洗中的關(guān)鍵操作,可以讓你有效地處理和分析數(shù)據(jù)。 總結(jié)DataFrame是Python中處理和分析數(shù)據(jù)的核心工具之一。通過(guò)本教程,你已經(jīng)掌握了DataFrame的基本概念、創(chuàng)建方法、數(shù)據(jù)操作、分組聚合以及數(shù)據(jù)清洗和處理技巧。這些知識(shí)將使你能夠更自信地處理各種數(shù)據(jù)集,從而更好地支持你的項(xiàng)目和決策。 |
|
來(lái)自: 剩礦空錢(qián) > 《Python》