目錄
一、Series:一維帶標簽的數組
二、DataFrame:二維表格型數據結構
三、Series 的核心操作
四、 DataFrame 的核心操作
五、?索引的特殊用法
六、 loc 與 iloc:DataFrame 的高級查詢
七、綜合案例
一、Series:一維帶標簽的數組
Series 是 pandas 中最基礎的一維數據結構,由數據值和索引(index)?組成,可理解為 “帶標簽的列表”。
- 核心特點:
- 可通過索引或位置快速訪問、修改數據。
- 數據值可以是數值、字符串等多種類型;
- 索引可以是自定義標簽(如字符串)或默認整數(從 0 開始);
- 代碼示例:
import pandas as pd# 1. 基于列表創建,默認整數索引
s_1 = pd.Series([1, 2, 3, 4, 5])
print(s_1)
# 輸出:
# 0 ???1
# 1 ???2
# 2 ???3
# 3 ???4
# 4 ???5
# dtype: int64
# 2. 自定義索引(字符串標簽)
s_2 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s_2['d']) ?# 通過標簽訪問,輸出:4
print(s_2[4]) ? ?# 通過位置訪問,輸出:5
# 3. 基于字典創建(鍵為索引,值為數據)
dic_1 = {"name1": "Peter", "name2": "tim", "name3": "rose"}
s_4 = pd.Series(dic_1)
print(s_4)
?# 輸出:
# name1 ???Peter
# name2 ?????tim
# name3 ????rose
# dtype: object
# 4. 常用操作:修改值、刪除元素
s_2[0] = 100 ?# 修改第一個元素值
s_2 = s_2.drop('a') ?# 刪除索引為'a'的元素
二、DataFrame:二維表格型數據結構
DataFrame 是 pandas 中最常用的二維數據結構,類似 Excel 表格或數據庫表,由行索引、列名和數據值組成,可視為 “多個 Series 的拼接”(每一列是一個 Series)。
核心特點:
- 行和列都有標簽(行索引 index,列名 columns);
- 支持靈活的增刪改查、排序、篩選等操作;
- 可通過字典、數組等多種方式創建。
代碼示例:
import pandas as pd# 1. 基于字典創建(鍵為列名,值為列數據)
dic = {'name': ['kiti', 'beta', 'peter', 'tom'],'age': [20, 18, 35, 21],'gender': ['f', 'f', 'm', 'm']}
df = pd.DataFrame(dic)
print(df)
# 輸出:
# ? ? name ?age gender
# 0 ? kiti ? 20 ? ? ?f
# 1 ? beta ? 18 ? ? ?f
# 2 ?peter ? 35 ? ? ?m
# 3 ? ?tom ? 21 ? ? ?m
# 2. 自定義行索引
df_1 = pd.DataFrame({'age': [10, 11, 12],'name': ['tim', 'tom', 'rose']},index=['person1', 'person2', 'person3']) ?# 行索引為自定義標簽
print(df_1.index) ? # 查看行索引:Index(['person1', 'person2', 'person3'], dtype='object')
print(df_1.columns) # 查看列名:Index(['age', 'name'], dtype='object')
三、Series 的核心操作
Series 的操作圍繞 “訪問、修改、刪除” 展開,依賴索引或位置實現。
訪問數據:
s_2 = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])# 標簽訪問(單個/多個)
print(s_2['d']) # 單個元素:4
print(s_2['a':'d']) # 切片(包含終點):a=1, b=2, c=3, d=4
print(s_2[['a', 'd']]) # 多個標簽:a=1, d=4# 位置訪問(類似列表)
s_3 = pd.Series(['lily', 'rose', 'jack'])
print(s_3[2]) # 單個位置:jack
print(s_3[0:2]) # 切片(不包含終點):lily, rose
修改與刪除:
s_3[0] = 'Peter' # 修改指定位置的值
s_1 = s_1.drop('a') # 刪除標簽為'a'的元素(返回新Series,原數據不變)
四、 DataFrame 的核心操作
DataFrame 支持行列增刪、數據訪問、排序、值替換等操作,靈活性極高。
數據訪問:
# 訪問列(列名作為屬性或鍵)
print(df.name) # 等價于df['name'],輸出name列數據
print(df[['age', 'name']]) # 訪問多列# 訪問行(標簽或位置)
print(df.loc['person1']) # 通過行標簽訪問
print(df.iloc[0:2]) # 通過位置切片訪問前2行# 訪問單個值
print(df.loc['person1', 'name']) # 行標簽+列名:tim
增刪行列:
# 增加列
df['pay'] = [20, 30, 40, 50] # 新增'pay'列# 增加行
df.loc['person4'] = [20, 'kitty', 'f', 60] # 新增行(指定行標簽和數據)# 刪除列
del df['age'] # 直接刪除'age'列
df.drop('name', axis=1, inplace=True) # 通過drop刪除列(axis=1表示列)# 刪除行
df.drop('person3', axis=0, inplace=True) # axis=0表示行
排序與值替換:
# 按列排序
df.sort_values(by=['age']) # 按'age'升序排序
df.sort_values(by=['age'], ascending=False) # 降序排序(ascending=False)# 值替換
df['gender'] = df['gender'].replace(['m', 'f'], ['male', 'female']) # 將'm'替換為'male','f'替換為'female'
五、?索引的特殊用法
pandas 的索引(index)是數據訪問的核心,支持多種類型(如整數、字符串、日期),且可靈活重置。
日期索引:
import numpy as np
# 生成日期索引(2018-01-01到2018-01-05)
datas = pd.date_range('20180101', periods=5)
df1 = pd.DataFrame(np.arange(30).reshape(5,6), index=datas, columns=['A','B','C','D','E','F'])
print(df1.index) # 輸出日期索引:DatetimeIndex(['2018-01-01', ..., '2018-01-05'], dtype='datetime64[ns]')
重置索引:
s_4 = pd.Series({"name1": "Peter", "name2": "tim", "name3": "rose"})
s_4.index = range(0, len(s_4)) # 將索引重置為0,1,2
六、 loc 與 iloc:DataFrame 的高級查詢
兩種方法用于精確定位數據,區別在于索引方式:
loc
:基于標簽索引(行標簽 + 列名);iloc
:基于位置索引(行號 + 列號,從 0 開始)。
代碼示例:
# 基于日期索引的DataFrame
df = pd.DataFrame(np.arange(30).reshape(5,6), index=pd.date_range('20180101', periods=5),columns=['A','B','C','D','E','F'])# loc用法(標簽索引)
print(df.loc['20180103', 'B']) # 2018-01-03行,B列的值:13
print(df.loc['20180103':, ['B', 'D']]) # 2018-01-03及之后的行,B和D列# iloc用法(位置索引)
print(df.iloc[1, 2]) # 第2行(index=1),第3列(columns=2)的值:8
print(df.iloc[[1,2,4], :]) # 第2、3、5行的所有列
七、綜合案例
import pandas as pd
import numpy as np# 1. Series常用操作
# 創建Series(帶自定義索引)
sales = pd.Series([150, 200, 180, 220], index=['一月', '二月', '三月', '四月'])
print("1. 月度銷售額數據:")
print(sales)# 基本訪問
print("\n二月銷售額:", sales['二月']) # 標簽訪問
print("第一季度銷售額:\n", sales[0:3]) # 位置切片# 基本計算
print("\n平均月銷售額:", sales.mean())
print("總銷售額:", sales.sum())# 修改數據
sales['三月'] = 190
print("\n修改后三月銷售額:\n", sales)# 2. DataFrame創建與基礎訪問
# 從字典創建DataFrame
data = {'姓名': ['張三', '李四', '王五', '趙六'],'部門': ['技術', '市場', '技術', '行政'],'工資': [8000, 7500, 9000, 6800],'入職年份': [2020, 2021, 2019, 2022]
}
df = pd.DataFrame(data, index=['EMP001', 'EMP002', 'EMP003', 'EMP004'])
print("\n2. 員工信息表:")
print(df)# 查看基本信息
print("\n數據形狀(行,列):", df.shape)
print("列名:", df.columns.tolist())# 列訪問
print("\n所有員工工資:\n", df['工資'])
print("技術部員工:\n", df[df['部門'] == '技術'])# 行訪問
print("\nEMP002員工信息:\n", df.loc['EMP002']) # 標簽訪問
print("前2名員工信息:\n", df.iloc[:2]) # 位置訪問# 3. DataFrame數據處理
# 新增列
df['年薪'] = df['工資'] * 12
print("\n3. 添加年薪列后:")
print(df)# 修改數據
df.loc['EMP002', '工資'] = 7800 # 修改特定值
print("\n修改李四工資后:\n", df)# 排序
df_sorted = df.sort_values(by='工資', ascending=False) # 降序排序
print("\n按工資排序后:\n", df_sorted)# 簡單篩選
high_salary = df[df['工資'] > 7500]
print("\n工資超過7500的員工:\n", high_salary)# 分組統計
dept_avg = df.groupby('部門')['工資'].mean()
print("\n各部門平均工資:\n", dept_avg)# 4. 數據讀取與保存(模擬)
# 實際使用時替換為真實文件路徑
# df.to_csv('employee_data.csv', index=False) # 保存為CSV
# new_df = pd.read_csv('employee_data.csv') # 讀取CSV
print("\n4. 數據讀取提示:取消注釋可實現CSV文件的保存和讀取")