一、Pandas庫
1.1、概念
????????Pandas是一個開源的、用于數據處理和分析的Python庫,特別適合處理表格類數 據。它建立在NumPy數組之上,提供了高效的數據結構和數據分析工具,使得數據操作變得更加簡單、便捷和高效。
????????Pandas 的目標是成為 Python 數據分析實踐與實戰的必備高級工具,其長遠目標是成為最強大、最靈活、可以支持任何語言的開源數據分析工具
1.2、數據結構
1. Series:一維數組,可以存儲任何數據類型(整數、字符串、浮點數等),每個 元素都有一個與之對應的標簽(索引)。
2. DataFrame:二維表格型數據結構,可以視為多個 Series 對象的集合,每一列 都是一個 Series。每列可以有不同的數據類型,并且有行和列的標簽。
1.3、數據操作
讀取和保存數據:支持多種數據格式,如 CSV、Excel、SQL 數據庫、JSON 等。
數據選擇和過濾:提供靈活的索引和條件篩選功能,方便數據的提取和過濾。
數據清洗:提供了處理缺失數據、重復數據、異常值等數據清洗功能。
數據轉換:通過 apply(), map(),replace()等方法進行數據轉換。
數據合并:使用concat(), merge(), join()等方法進行數據的橫向和縱向合并。
聚合和分組:使用 組和聚合。
1.4、主要特點
1. 數據結構:Pandas提供了兩種主要的數據結構:Series(一維數組)和 DataFrame(二維表格)。
2. 數據操作:支持數據的增、刪、改、查等操作,以及復雜的數據轉換和清洗。
3. 數據分析:提供豐富的數據分析方法,如聚合、分組、透視等。
4. 文件讀取與寫入:支持多種文件格式(如CSV、Excel、SQL等)的讀取和寫入。
5. 與其他庫集成良好:Pandas 與許多其他三方庫(如 NumPy、Matplotlib、 Scikit-learn等)無縫集成,形成了一個強大的數據科學生態系統。
6. 強大的社區支持:Pandas 擁有龐大的開發者社區,提供豐富的資源和學習材 料。
官方文檔
http://pandas.pydata.org/pandas-docs/stable/
安裝
pip install pandas
二、Pandas的讀取與保存
2.1、讀取數據
2.1.1、Pandas讀取Excel文件
說明
????????使用Pandas模塊操作Excel時候,需要安裝openpyxl
????????pip install openpyxl==3.1.2
????????pandas.read_excel是pandas庫中用于讀取Excel文件( .xls 或 數。它可以將Excel文件中的數據讀取為DataFrame對象,便于進行數據分析和處 理。?
pandas.read_excel(io, sheet_name=0, header=0, index_col=None, usecols=None, squeeze=False,dtype=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, parse_dates=False, date_parser=None,skipfooter=0, convert_float=True, **kwds)
描述 | 說明 |
---|---|
io | 文件路徑或文件對象。這是唯一必需的參數,用于指定要讀取的Excel文件。 |
sheet_name=0 | 要讀取的表名或表的索引號。默認為0,表示讀取第一個工作 表。可以指定工作表名或索引號,如果指定多個,將返回一個字典,鍵為工作表 名,值為對應的DataFrame。 |
header=0 | 用作列名的行號,默認為0,即第一行作為列名。如果沒有標題行, 可以設置為None。 |
index_col=None | 用作行索引的列號或列名。默認為None,表示不使用任何列 作為索引。可以是一個整數、字符串或列名的列表。 |
usecols=None | 要讀取的列。默認為None,表示讀取所有列。可以是一個整數 列表、字符串列表或Excel列的位置(如 [0, 1, 2])或字母標記(如 ['A', 'B', 'C'])。 |
squeeze=False | 如果讀取的數據只有一列,當設置為True時,返回一個Series 而不是DataFrame。 |
dtype=None | 指定某列的數據類型。默認為None,表示自動推斷。可以是一個 字典,鍵為列名,值為NumPy數據類型。 |
skiprows=None | 要跳過的行號或行號列表。默認為None,表示不跳過任何行。 可以是整數或整數列表。 |
nrows=None | 讀取的行數,從文件頭開始。默認為None,表示讀取所有行。 |
na_values=None | 將指定的值替換為NaN。默認為None,表示不替換。可以是 一個值或值的列表。 |
keep_default_na=True | 如果為True(默認),則除了通過 na_values指定的值外,還將默認的NaN值視為NaN。 |
parse_dates=False | 是否嘗試將列解析為日期。默認為False。可以是一個布爾 值、列名列表或列號的列表。 |
date_parser=None | 用于解析日期的函數。默認為None,表示使用pandas默認 的日期解析器。 |
skipfooter=0 | 要跳過的文件底部的行數。默認為0,表示不跳過任何底部的 行。 |
convert_float=True | 是否將所有浮點數轉換為64位浮點數。默認為True,以 避免數據類型推斷問題。 |
**kwds | 允許用戶傳遞其他關鍵字參數,這些參數可能會被引擎特定的讀取器所 識別。 |
import pandas as pd
pd.read_excel('stu_data.xlsx')
指定導入哪個Sheet
pd.read_excel('stu_data.xlsx',sheet_name='Target') pd.read_excel('stu_data.xlsx',sheet_name=0)
通過index_col指定行索引?
pd.read_excel('stu_data.xlsx',sheet_name=0,index_col=0)
通過header指定列索引?
pd.read_excel('stu_data.xlsx',sheet_name=0,header=1) pd.read_excel('stu_data.xlsx',sheet_name=0,header=None)
通過usecols指定導入列
pd.read_excel('stu_data.xlsx',usecols=[1,2,3])
2.1.2、Pandas讀取數據_CSV文件
????????pandas.read_csv 是一個非常強大的函數,用于從文件、URL、文件-like對象等讀 取逗號分隔值(CSV)文件。這個函數有很多參數,允許你以多種方式自定義數據加 載過程。
pandas.read_csv(filepath_or_buffer, sep, header, usercols, na_values, parse_dates, skiprows, nrows)
描述 | 說明 |
---|---|
filepath_or_buffer | 指定要讀取的 CSV 文件的路徑或文件對象。可以是一個 字符串,表示文件的絕對路徑或相對路徑;也可以是一個已經打開的文件對象 (例如通過 open() 函數打開的文件)。 |
sep | 字符串,用于分隔字段的字符。默認是逗號,,但可以是任何字符,例如 ';' 或 '\t'(制表符)。 |
header | 整數或整數列表,用于指定行號作為列名,或者沒有列名, |
usecols | 列表或 callable,用于指定要讀取的列。可以是列名的列表,也可以是 列號的列表。 |
na_values | 字符串、列表或字典,用于指定哪些其他值應該被視為NA/NaN |
parse_dates | 列表或字典,用于指定將哪些列解析為日期。 |
skiprows | 整數或列表,用于指定要跳過的行號或條件。 |
nrows | 整數,用于指定要讀取的行數。 |
導入csv文件時除了指明文件路徑,還需要設置編碼格式。
在國內,Python中用得比較多的兩種編碼格式是UTF-8和gbk,默認編碼格式是UTF-8。
通過設置參數encoding來設置導入的編碼格式。
pd.read_csv('stu_data.csv',encoding='gbk')
2.1.4、Pandas讀取txt文件
????????導入.txt文件用得方法時read_table(),read_table()是將利用分隔符分開的文件導入。DataFrame的通用函數。它不僅僅可以導入.txt文件,還可以導入.csv文件。
導入.txt文件
pd.read_table('test_data.txt',encoding='utf-8',sep='\t')
導入.csv文件,指明分隔符?
pd.read_table('stu_data.csv',encoding='gbk',sep=',')
2.1.5、讀取數據庫數據?
配置 MySQL 連接引擎
conn = pymysql.connect( host = 'localhost', user = 'root', passwd = 'root', db = 'mydb',port=3306, charset = 'utf8' )
讀取數據表
pd.read_sql( sql :需要執行的 SQL 語句/要讀入的表名稱con : 連接引擎名稱 index_col = None :將被用作索引的列名稱 columns = None :當提供表名稱時,需要讀入的列名稱 list ) tab1 = pd.read_sql('SELECT * FROM t_menus',con=conn) tab1 = pd.read_sql('SELECT count(1) FROM t_menus',con=conn)number = 10 tab1 = pd.read_sql(f'SELECT * FROM t_menus LIMIT {number}',con=conn,index_col = ['empno'],)
數據sql
CREATE TABLE `t_menus` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(32) NOT NULL,`path` varchar(32) DEFAULT NULL,`level` int(11) DEFAULT NULL,`pid` int(11) DEFAULT NULL,PRIMARY KEY (`id`),UNIQUE KEY `name` (`name`),KEY `pid` (`pid`),CONSTRAINT `t_menus_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `t_menus` (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8mb4;INSERT INTO `t_menus` VALUES (-1,'全部',NULL,0,NULL),(1,'用戶管理',NULL,1,-1),(2,'權限管理',NULL,1,-1),(3,'商品管理',NULL,1,-1),(4,'訂單管理',NULL,1,-1),(5,'數據統計',NULL,1,-1),(11,'用戶列表','/user_list',2,1),(21,'角色列表','/author_list',2,2),(22,'權限列表','/role_list',2,2),(31,'商品列表','/product_list',2,3),(32,'分類列表','/group_list',2,3),(33,'屬性列表','/attribute_list',2,3),(41,'訂單列表','/order_list',2,4),(51,'統計列表','/data_list',2,5);
2.2、保存數據
df.to_csv( filepath_or_buffer :要保存的文件路徑 sep =:分隔符 columns :需要導出的變量列表 header = True :指定導出數據的新變量名,可直接提供 list index = True :是否導出索引 mode = 'w' : Python 寫模式,讀寫方式:r,r+ , w , w+ , a , a+ encoding = 'utf-8' :默認導出的文件編碼格式
)
df2.to_csv('temp.csv')
#===========================
df.to_excel( filepath_or_buffer :要讀入的文件路徑 sheet_name = 1|Sheet :要保存的表單名稱
)
df2.to_excel('temp.xlsx', index = False, sheet_name = data)
2.2.1、to_csv
????????用于將DataFrame對象保存為CSV(逗號分隔值)文件的方法。
DataFrame.to_csv(path_or_buf=None, sep=',', na_rep='', float_format=None, columns=None, header=True, index=True, mode='w', encoding=None, quoting=None, quotechar='"', **kwargs)
描述 | 說明 |
---|---|
path_or_buf | 指定輸出文件的路徑或文件對象。 |
sep | 字段分隔符,通常使用逗號,或制表符\t。 |
na_rep | 缺失值的表示方式,默認為空字符串 ''。 |
float_format | 浮點數的格式化方式,例如 '%.2f'用于格式化為兩位小數。 |
columns | 要寫入的列的子集,默認為None,表示寫入所有列。 |
header | 是否寫入行索引,通常設置為True或False,取決于是否需要索引。 |
index | 是否寫入列名,通常設置為True。 |
mode | 寫入模式,通常使用’w’(寫入,覆蓋原文件)或’a’(追加到文件末尾)。 |
encoding | 文件編碼,特別是在處理非ASCII字符時很重要 |
quoting | 控制字段引用的行為,通常用于確保字段中的分隔符被正確處理。 |
quotechar | 用于包圍字段的字符,默認為雙引號"。 |
**kwargs | 其他關鍵字參數。 |
import pandas as pd# 創建一個簡單的DataFrame
data = {
'姓名': ['張三', '李四', '王五'],
'年齡': [28, 34, 29],
'城市': ['北京', '上海', '廣州']
}
df = pd.DataFrame(data)
# 將DataFrame保存為CSV文件
df.to_csv('人員信息.csv', index=False, encoding='utf_8_sig')
2.2.2、to_excel
????????Pandas中的 to_excel用于將DataFrame保存為Excel文件。
DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='', float_format=None, columns=None, header=True, index=True, index_label=None, startrow=0, startcol=0, engine=None, merge_cells=True, inf_rep='inf', freeze_panes=None, storage_options=None)
描述 | 說明 |
---|---|
excel_writer | 字符串或ExcelWriter對象,指定輸出文件的路徑或文件對象。 |
sheet_name='Sheet1' | 要寫入的工作表名稱。 |
na_rep='' | 指定缺失值的表示方式。 |
float_format=None | 浮點數的格式化方式,例如’%.2f’。 |
columns=None | 要寫入的列的子集,默認為None,表示寫入所有列。 |
header=True | 是否寫入列名,默認為True。 |
index_label=None | 是否寫入行索引,默認為True。 |
index=True | 指定行索引列的列名,如果為None,并且 : header為True,則使用索引名。 |
startrow= | 寫入DataFrame的起始行位置,默認為0。 |
startcol=0 | 寫入DataFrame的起始列位置,默認為0。 |
engine=None | 指定用于寫入文件的引擎,可以是’openpyxl’(默認) 或’xlsxwriter’。 |
merge_cells=True | 是否合并單元格,這在有合并單元格的Header時很有用。 |
inf_rep='inf' | 指定無限大的表示方式。 |
freeze_panes=None | 指定凍結窗口的單元格范圍,例如’A2’。 |
storage_options=None | 指定存儲連接的參數,例如認證憑據。 |
import pandas as pd
# 創建一個簡單的DataFrame
data = {
'姓名': ['張三', '李四', '王五'],
'年齡': [28, 34, 29],
'城市': ['北京', '上海', '廣州']
}
df = pd.DataFrame(data)
# 將DataFrame保存為Excel文件
df.to_excel('人員信息.xlsx', index=False)
2.2.3、保存數據到數據庫
注意
需要安裝sqlalchemy
pip install sqlalchemy
df.to_sql( name :將要存儲數據的表名稱con : 連接引擎名稱 if_exists = 'fail' :指定表已經存在時的處理方式 fail :不做任何處理(不插入新數據) replace :刪除原表并重建新表 append :在原表后插入新數據 index = True :是否導出索引 )from sqlalchemy import create_engine
con = create_engine('mysql+pymysql://root:root@localhost:3306/mydb?charset=utf8') df.to_sql('t_stu',con,if_exists=append)
三、思維導圖
?