目錄
數據結構
?pandas.Series :一維數組,類似于數組,但索引可以是任意類型,而不僅僅是整數
pandas.DataFrame :二維表格型數據結構,類似于 Excel 表格,每列可以是不同的數據類型
數據讀取與寫入
讀取數據
?pd.read_csv() :讀取 CSV 文件
pd.read_excel() :讀取 Excel 文件
pd.read_sql() :從數據庫讀取數據
寫入數據
?DataFrame.to_csv() :將數據寫入 CSV 文件
DataFrame.to_excel() :將數據寫入 Excel 文件
DataFrame.to_sql() :將數據寫入數據庫
?數據選擇與索引
基于標簽的索引
DataFrame.loc :按標簽選擇數據
Series.loc :按標簽選擇數據
基于位置的索引
DataFrame.iloc :按位置選擇數據
Series.iloc :按位置選擇數據
布爾索引
數據清洗與預處理
處理缺失值
DataFrame.dropna() :刪除缺失值
DataFrame.fillna() :填充缺失值
數據類型轉換
DataFrame.astype() :轉換數據類型
重復數據處理
DataFrame.drop_duplicates() :刪除重復數據
數據分組與聚合
?分組
DataFrame.groupby() :對數據進行分組
聚合
GroupBy.sum() :計算每組的總和
GroupBy.mean() :計算每組的平均值
GroupBy.agg() :自定義聚合函數
數據合并與連接
合并
pd.concat() :沿特定軸連接多個對象
DataFrame.merge() :基于共同列合并數據
連接
?DataFrame.join() :按索引連接兩個對象
數據排序與排名
排序
DataFrame.sort_values() :按值排序
DataFrame.sort_index() :按索引排序
排名
DataFrame.rank() :對數據進行排名
數據時間序列
時間序列創建
pd.date_range() :創建日期范圍
?pd.to_datetime() :將字符串轉換為日期時間格式
時間序列操作
DataFrame.resample() :對時間序列數據進行重采樣
DataFrame.shift() :將數據沿時間軸移動
數據可視化
DataFrame.plot() :繪制數據圖表
Series.plot() :繪制序列圖表
Pandas 是 Python 中一個功能強大的數據分析庫,它提供了大量用于數據處理、分析和轉換的方法。以下按照不同的功能類別詳細介紹 Pandas 庫中常用的方法:
數據結構
-
?pandas.Series :一維數組,類似于數組,但索引可以是任意類型,而不僅僅是整數
-
pandas.DataFrame :二維表格型數據結構,類似于 Excel 表格,每列可以是不同的數據類型
## 數據結構
import pandas as pd# 創建 Series, s.index獲取索引, s.values獲取數據值
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print(s)
# a 1
# b 2
# c 3
# dtype: int64print(s.index) # Index(['a', 'b', 'c'], dtype='object')
print(s.values) # [1 2 3]# 創建 DataFrame, df.index獲取行索引, df.columns獲取列索引, df.values獲取數據值
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print(df)
# A B
# 0 1 4
# 1 2 5
# 2 3 6print(df.index) # RangeIndex(start=0, stop=3, step=1)
print(df.columns) # Index(['A', 'B'], dtype='object')
print(df.values)
# [[1 4]
# [2 5]
# [3 6]]
數據讀取與寫入
讀取數據
-
?pd.read_csv() :讀取 CSV 文件
-
pd.read_excel() :讀取 Excel 文件
-
pd.read_sql() :從數據庫讀取數據
## 數據讀取與寫入
# 讀取數據
import pandas as pd
import sqlite3# 讀取 CSV 文件
df = pd.read_csv('data.csv')
print(df)# 讀取 Excel 文件
df = pd.read_excel('data.xlsx')
print(df)# 從 SQLite 數據庫讀取數據
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)
print(df)
寫入數據
-
?DataFrame.to_csv() :將數據寫入 CSV 文件
-
DataFrame.to_excel() :將數據寫入 Excel 文件
-
DataFrame.to_sql() :將數據寫入數據庫
# 寫入數據
import pandas as pd
import sqlite3# 寫入 CSV 文件
df.to_csv('output.csv', index=False)# 寫入 Excel 文件
df.to_excel('output.xlsx', index=False)# 將數據寫入 SQLite 數據庫
df.to_sql('table_name', conn, if_exists='replace', index=False)
?數據選擇與索引
基于標簽的索引
-
DataFrame.loc :按標簽選擇數據
## 數據選擇與索引# 按標簽選擇數據
import pandas as pd# 創建一個 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['row1', 'row2', 'row3'])
print("原始 DataFrame:")
print(df)
# A B
# row1 1 4
# row2 2 5
# row3 3 6# 按標簽選擇單個元素
print("\n選擇 'row1' 行和 'A' 列的元素:")
print(df.loc['row1', 'A']) # 1# 按標簽選擇多行和多列
print("\n選擇 'row1' 和 'row2' 行,以及 'A' 和 'B' 列:")
print(df.loc[['row1', 'row2'], ['A', 'B']])
# A B
# row1 1 4
# row2 2 5# 按標簽選擇所有行,但只選擇特定列
print("\n選擇所有行,但只選擇 'B' 列:")
print(df.loc[:, 'B'])
# row1 4
# row2 5
# row3 6
# Name: B, dtype: int64
-
Series.loc :按標簽選擇數據
# 創建一個 Series
s = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
print("\n原始 Series:")
print(s)
# 原始 Series:
# a 1
# b 2
# c 3
# dtype: int64# 按標簽選擇單個元素
print("\n選擇 'a' 索引的元素:")
print(s.loc['a']) # 1# 按標簽選擇多個元素
print("\n選擇 'a' 和 'c' 索引的元素:")
print(s.loc[['a', 'c']])
# a 1
# c 3
# dtype: int64
基于位置的索引
-
DataFrame.iloc :按位置選擇數據
# 基于位置的索引
import pandas as pd# 創建一個 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
print("原始 DataFrame:")
print(df)
# A B
# 0 1 4
# 1 2 5
# 2 3 6# 按位置選擇單個元素
print("\n選擇第1行第1列的元素:")
print(df.iloc[0, 0]) # 1# 按位置選擇多行和多列
print("\n選擇第1行和第2行,以及第0列和第1列:")
print(df.iloc[[0, 1], [0, 1]])
# A B
# 0 1 4
# 1 2 5# 按位置選擇所有行,但只選擇特定列
print("\n選擇所有行,但只選擇第1列:")
print(df.iloc[:, 1])
# 0 4
# 1 5
# 2 6
# Name: B, dtype: int64
-
Series.iloc :按位置選擇數據
# 創建一個 Series
s = pd.Series([1, 2, 3])
print("\n原始 Series:")
print(s)
# 0 1
# 1 2
# 2 3
# dtype: int64# 按位置選擇單個元素
print("\n選擇第0個位置的元素:")
print(s.iloc[0]) # 1# 按位置選擇多個元素
print("\n選擇第0個和第2個位置的元素:")
print(s.iloc[[0, 2]])
# 0 1
# 2 3
# dtype: int64
布爾索引
根據條件篩選數據
# 根據條件篩選數據
import pandas as pd# 創建一個 DataFrame
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
filtered_df = df[df['A'] > 2]
print(filtered_df)
# dtype: int64
# A B
# 2 3 6
數據清洗與預處理
處理缺失值
-
DataFrame.dropna() :刪除缺失值
-
DataFrame.fillna() :填充缺失值
數據類型轉換
-
DataFrame.astype() :轉換數據類型
重復數據處理
-
DataFrame.drop_duplicates() :刪除重復數據
## 數據清洗與預處理# 刪除缺失值
df.dropna(inplace=True)
# 填充缺失值
df.fillna(0, inplace=True)# 轉換數據類型
df['A'] = df['A'].astype('int')
# 刪除重復數據
df.drop_duplicates(inplace=True)
數據分組與聚合
?分組
-
DataFrame.groupby() :對數據進行分組
聚合
-
GroupBy.sum() :計算每組的總和
-
GroupBy.mean() :計算每組的平均值
-
GroupBy.agg() :自定義聚合函數
## 數據分組與聚合# 對數據進行分組
grouped = df.groupby('column_name')# 計算每組的總和
grouped.sum()# 計算每組的平均值
grouped.mean()# 自定義聚合函數
grouped.agg(['mean', 'sum', 'max'])
數據合并與連接
合并
-
pd.concat() :沿特定軸連接多個對象
-
DataFrame.merge() :基于共同列合并數據
## 數據合并與連接
# 合并
# 沿特定軸連接多個對象, 0行1列
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
concatenated_df = pd.concat([df1, df2], axis=0)
print(concatenated_df)
# A B
# 0 1 3
# 1 2 4
# 0 5 7
# 1 6 8# 基于共同列合并數據
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [1, 2], 'C': [5, 6]})
merged_df = df1.merge(df2, on='A')
print(merged_df)
# A B C
# 0 1 3 5
# 1 2 4 6
連接
-
?DataFrame.join() :按索引連接兩個對象
# 連接
# 按索引連接兩個對象, lsuffix和rsuffix是當列名沖突時在后添加后綴,以便區分
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'C': [5, 6], 'D': [7, 8]})
joined_df = df1.join(df2, lsuffix='_left', rsuffix='_right')
print(joined_df)
數據排序與排名
排序
-
DataFrame.sort_values() :按值排序
-
DataFrame.sort_index() :按索引排序
## 數據排序與排名# 排序
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
sorted_df = df.sort_values('A', ascending=False)
print(sorted_df)
# A B
# 1 2 4
# 0 1 3# 按索引排序
sorted_df = df.sort_index()
print(sorted_df)
# A B
# 0 1 3
# 1 2 4
排名
-
DataFrame.rank() :對數據進行排名
# 排名
df = pd.DataFrame({'A': [2, 1, 3], 'B': [4, 6, 5]})
# 對數據進行排名
ranked_df = df.rank()
print(ranked_df)
# A B
# 0 2.0 1.0
# 1 1.0 3.0
# 2 3.0 2.0
數據時間序列
時間序列創建
-
pd.date_range() :創建日期范圍
-
?pd.to_datetime() :將字符串轉換為日期時間格式
## 數據時間序列
# 時間序列創建
# 創建日期范圍
dates = pd.date_range(start='2025-07-01', end='2025-08-1')
print(dates)
# DatetimeIndex(['2025-07-01', '2025-07-02', '2025-07-03', '2025-07-04',
# '2025-07-05', '2025-07-06', '2025-07-07', '2025-07-08',
# '2025-07-09', '2025-07-10', '2025-07-11', '2025-07-12',
# '2025-07-13', '2025-07-14', '2025-07-15', '2025-07-16',
# '2025-07-17', '2025-07-18', '2025-07-19', '2025-07-20',
# '2025-07-21', '2025-07-22', '2025-07-23', '2025-07-24',
# '2025-07-25', '2025-07-26', '2025-07-27', '2025-07-28',
# '2025-07-29', '2025-07-30', '2025-07-31', '2025-08-01'],
# dtype='datetime64[ns]', freq='D')# 將字符串轉換為日期時間格式
date = pd.to_datetime('2025-07-01')
print(date) # 2025-07-01 00:00:00
時間序列操作
-
DataFrame.resample() :對時間序列數據進行重采樣
-
DataFrame.shift() :將數據沿時間軸移動
# 對時間序列數據進行重采樣
dates = pd.date_range(start='2025-07-01', end='2025-07-4')
df = pd.DataFrame({'value': [1, 2, 3, 4]}, index=dates)
resampled_df = df.resample('M').mean()
print(resampled_df)
# value
# 2025-07-31 2.5# 將數據沿時間軸移動
shifted_df = df.shift(periods=1, freq='D')
print(shifted_df)
# value
# 2025-07-02 1
# 2025-07-03 2
# 2025-07-04 3
# 2025-07-05 4
數據可視化
-
DataFrame.plot() :繪制數據圖表
## 數據可視化
# 繪制數據圖表
import matplotlib.pyplot as pltdf = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.plot(kind='line', x='A', y='B')
plt.show()
?
-
Series.plot() :繪制序列圖表
# 繪制序列圖表
import matplotlib.pyplot as plts = pd.Series([1, 2, 3])
s.plot(kind='bar')
plt.show()