零基礎入門 Pandas:數據處理的 "萬能工具"
如果你是剛接觸數據分析的小白,一定聽過 "Pandas" 這個名字。簡單說,Pandas 是 Python 中專門用來處理數據的工具庫,就像 Excel 的 "高級版"—— 能更快、更靈活地處理成千上萬行數據,是數據分析入門的必備技能。下面用最通俗的語言,帶你一步步認識 Pandas 的核心用法。
一、先搞懂:Pandas 最核心的 2 種數據結構
Pandas 之所以好用,是因為它有 2 種專門為數據設計的 "容器",所有數據處理都圍繞這兩種容器展開。
1. Series:像 "帶標簽的列表"(一維數據)
可以理解為只有 1 列的表格,比如 "班級學生的數學成績":
- 左邊是 "標簽"(索引,比如學生姓名 / 學號)
- 右邊是 "數據"(比如成績)
舉個例子(代碼可直接復制運行):
import pandas as pd # 先"召喚"Pandas工具# 用字典創建Series(鍵=標簽,值=數據)
成績 = pd.Series({'小明': 90, '小紅': 85, '小剛': 95})
print(成績)
運行后會看到:
小明 90
小紅 85
小剛 95
dtype: int64 # 數據類型是整數
2. DataFrame:像 "Excel 表格"(二維數據)
這是 Pandas 最常用的結構,有行標簽(索引)、列標簽(列名)和數據,比如 "班級學生的各科成績":
舉個例子:
# 用"字典套列表"創建DataFrame(鍵=列名,值=該列數據)
各科成績 = pd.DataFrame({'數學': [90, 85, 95],'語文': [88, 92, 89],'英語': [92, 88, 94]
}, index=['小明', '小紅', '小剛']) # 指定行標簽
print(各科成績)
運行后會看到熟悉的表格:
數學 語文 英語
小明 90 88 92
小紅 85 92 88
小剛 95 89 94
📌 關鍵區別:Series 只有 1 列,沒有 "列名";DataFrame 有多列,必須有 "列名",就像 Excel 的表頭。
二、第一步:讀取外部數據(比如 CSV/Excel)
實際分析中,數據很少是自己手寫的,大多來自外部文件(比如 CSV、Excel)。Pandas 一句話就能讀取:
1. 讀取 CSV 文件(最常用)
CSV 是純文本表格,比 Excel 體積小,適合大數據。
# 讀取本地CSV(路徑寫文件在你電腦里的位置,比如"桌面/數據.csv")
df = pd.read_csv("本地文件路徑.csv")# 也能直接讀取網上的CSV(比如下面這個是洛杉磯人口數據)
df = pd.read_csv("https://labfile.oss.aliyuncs.com/courses/906/los_census.csv")
2. 讀取后先 "預覽" 數據
如果數據有幾萬行,直接打印會卡死,用這兩個方法看前幾行 / 后幾行:
df.head() # 默認看前5行(括號里寫數字可改,比如head(10)看前10行)
df.tail() # 默認看后5行(同理tail(7)看后7行)
3. 快速了解數據 "概況"
用describe()
能一鍵看到數據的統計信息(比如最大值、最小值、平均值),幫你快速把握數據特征:
df.describe() # 只對數字類型的列有效
三、核心操作 1:選擇你需要的數據(數據索引)
拿到表格后,經常需要 "只看某幾行 / 某幾列",Pandas 有兩種最常用的選擇方式:
方式 1:按 "數字位置" 選(iloc)
就像 Excel 里的 "第 1 行、第 2 列",不管行標簽 / 列名是什么,只看位置(從 0 開始數!)。
語法:df.iloc[行位置, 列位置]
(逗號前是行,逗號后是列)
舉個例子(用前面的 "各科成績" 表格):
行位置 | 行標簽 | 數學(列 0) | 語文(列 1) | 英語(列 2) |
---|---|---|---|---|
0 | 小明 | 90 | 88 | 92 |
1 | 小紅 | 85 | 92 | 88 |
2 | 小剛 | 95 | 89 | 94 |
# 1. 選前2行(行位置0和1)
各科成績.iloc[:2] # 冒號表示"到...為止",[:2] = 從0到1(不包含2)# 2. 選第1行(位置0)、第2列(位置1,語文)
各科成績.iloc[0, 1] # 結果:88(小明的語文成績)# 3. 選第0、2行(小明、小剛),第0、2列(數學、英語)
各科成績.iloc[[0,2], [0,2]]
方式 2:按 "標簽名稱" 選(loc)
直接用 "行標簽(比如小明)" 或 "列名(比如數學)" 選,更直觀,不用記位置。
語法:df.loc[行標簽, 列名]
舉個例子:
# 1. 選"小明"這一行
各科成績.loc['小明']# 2. 選"數學"這一列
各科成績.loc[:, '數學'] # 逗號前寫":"表示"所有行"# 3. 選"小明、小剛"的"語文、英語"成績
各科成績.loc[['小明','小剛'], ['語文','英語']]
📌 小白記住:分不清就優先用
loc
(按名稱選),不容易出錯;需要按 "第 N 行第 N 列" 就用iloc
。
四、核心操作 2:刪除不需要的數據
拿到數據后,經常要刪冗余的行 / 列、重復數據或空白數據。
1. 刪除指定行 / 列(drop)
比如表格里有 "學號" 列用不上,直接刪掉:
# 刪除"學號"列(axis=1表示刪列,axis=0表示刪行)
df.drop(labels='學號', axis=1)# 刪除第0行(行標簽為0)
df.drop(labels=0, axis=0)
2. 刪除重復數據(drop_duplicates)
比如表格里有完全一樣的兩行(重復錄入),一鍵去重:
df.drop_duplicates() # 默認刪除所有列都重復的行
3. 刪除空白數據(dropna)
數據里經常有 "空白格"(Pandas 里叫 NaN),比如某個人的英語成績沒填,直接刪掉這一行:
df.dropna() # 默認刪除包含任何空白的行
五、核心操作 3:填充空白數據(fillna)
如果空白數據不多,直接刪除太可惜,就用合理的數值填充(比如用平均值)。
1. 用固定值填充(比如 0)
# 所有空白都填0
df.fillna(0)
2. 用前后值填充
比如某個人的英語成績空白,用他前一個人的成績填(或后一個人):
df.fillna(method='pad') # pad=用前面的值填充(向前填充)
df.fillna(method='bfill') # bfill=用后面的值填充(向后填充)
3. 用平均值填充(最常用)
比如數學成績有空白,用全班數學的平均值填,更合理:
# 用"數學"列的平均值,填充該列的空白
df['數學'].fillna(df['數學'].mean())
4. 插值填充(更智能)
如果數據有趨勢(比如溫度隨時間上升),用 "插值" 能更貼合數據規律。比如:
# 生成一個有空白的溫度數據
溫度數據 = pd.DataFrame({'溫度': [20, np.nan, 25, np.nan, 30]})# 線性插值(按中間值填,比如20和25之間的空白填22.5)
溫度數據.interpolate()
運行后空白會被智能填充:
溫度
0 20.0
1 22.5 # 插值結果
2 25.0
3 27.5 # 插值結果
4 30.0
六、快速繪圖:讓數據變直觀
Pandas 能直接調用繪圖工具,一句話畫出折線圖、柱狀圖等,不用學復雜的繪圖庫。
比如用前面的 "各科成績" 畫柱狀圖:
# 畫柱狀圖(kind='bar'表示柱狀圖,默認是折線圖)
各科成績.plot(kind='bar')
運行后會自動彈出圖表,能清晰看到每個人各科成績的對比。
七、小白入門總結
- 核心結構:先記住 Series(1 列)和 DataFrame(表格),90% 的操作都用這兩個。
- 數據讀取:用
pd.read_csv()
讀文件,head()
預覽,describe()
看概況。 - 數據選擇:按名稱用
loc
(簡單),按位置用iloc
(靈活)。 - 數據清理:刪數據用
drop
/drop_duplicates
/dropna
,填數據用fillna
/interpolate
。 - 快速繪圖:用
df.plot(kind='xxx')
看數據趨勢。