pandas 行索引
pandas索引修改

>>> df.index = pd.Index(list('ABCD'))
>>> df.columns = pd.Index(list('abcd'))
>>> df
a b c d
A 0.776520 0.093637 0.819028 0.304640
B 0.130550 0.682061 0.102499 0.782682
C 0.995216 0.959426 0.337403 0.897070
D 0.253985 0.161841 0.536915 0.269828
pandas 行索引改為日期
import pandas as pd
# 示例數據(假設已有 'date' 列)
data = {
'date': ['2023-01-01', '2023-01-02', '2023-01-03'],
'value': [100, 200, 300]
}
df = pd.DataFrame(data)
# 將 'date' 列轉換為 datetime 類型,并設為索引
df['date'] = pd.to_datetime(df['date'])
df.set_index('date', inplace=True)
print(df)

import pandas as pd
# calling DataFrame constructor
df = pd.DataFrame()
# Create 6 dates
df['time'] = pd.date_range('2/5/2019', periods = 6, freq ='2H')
print(df['time']) # print dataframe
# Extract features - year, month, day, hour, and minute
df['year'] = df['time'].dt.year
df['month'] = df['time'].dt.month
df['day'] = df['time'].dt.day
df['hour'] = df['time'].dt.hour
df['minute'] = df['time'].dt.minute
# Show six rows
df.head(6)
rename
dataframe[column_name].rename('industry')
dataframe.rename(columns={ 'name':'industry'})
dataframe 篩選行


篩選列數據
import numpy as np
# 添加缺失值
df.loc[2, 'Age'] = np.nan
# 篩選 Age 等于 25 或 NaN 的行
filtered_df = df[df['Age'].eq(25) | df['Age'].isna()]
參數說明
| 方法 | 參數 | 作用 |
|---|---|---|
eq() |
other |
判斷元素是否等于 other |
ne() |
other |
判斷元素是否不等于 other |
isin() |
values |
判斷元素是否在 values 列表中 |
str.contains() |
pat |
判斷字符串是否包含子串 pat |
query() |
expr |
使用字符串表達式篩選數據 |
總結
- 精確匹配:優先使用
eq()或== - 多條件篩選:用
&(與)、|(或)連接條件,注意括號 - 缺失值處理:結合
isna()或fillna() - 靈活查詢:
query()適合復雜邏輯表達式
通過組合這些方法,可以高效完成數據篩選任務。
根據平均值篩選
df=df[df.最高.lt( df.最高.mean() -23)]
print(df)
字符串篩選
df = df[df.loc[:'書名'].str.len() < 15]

索引切片
df = df[:3]
# 選擇最后4行
df = df[-4:]
# 每隔2行選, 返回奇數行
df = df[1::2]

loc修改單個數據
df.loc[601857,'行業'] = '加油站'



any函數

lambda表達式 和 iloc

# 篩選第0列值大于1的行
filtered_df = df[df.apply(lambda row: row.iloc[0] > 1, axis=1)]
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
})
# 遍歷每行每列
for i in range(len(df)): # 行索引
for j in range(len(df.columns)): # 列索引
value = df.iloc[i, j] # 用iloc定位
print(f"行[{i}], 列[{j}]: {value}")

pandas 文本操作

import pandas as pd
# 示例數據
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Email': ['alice@gmail.com', 'bob@yahoo.com', 'charlie@hotmail.com', 'david@gmail.com']}
df = pd.DataFrame(data)
# 篩選Email中包含"gmail"的行
gmail_users = df[df['Email'].str.contains('gmail')]
print(gmail_users)
import pandas as pd
# 示例數據
data = {'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva123']}
df = pd.DataFrame(data)
# 檢測Name是否以"A"開頭
df['Starts_with_A'] = df['Name'].str.match('^A')
print(df)

is操作符
總結:Pandas is 函數速查表
| 函數 | 作用 | 常用場景 |
|---|---|---|
isna() / isnull() |
檢測缺失值 | 數據清洗時過濾缺失值 |
notna() / notnull() |
檢測非缺失值 | 篩選有效數據 |
isin() |
判斷是否在列表中 | 分類篩選、數據匹配 |
is_monotonic_increasing |
檢查是否單調遞增 | 時間序列驗證 |
str.isnumeric() |
檢測字符串是否全為數字 | 數據格式校驗 |
is_unique |
檢查值是否唯一 | 主鍵/索引驗證 |
is_sparse |
檢測稀疏數據 | 內存優化場景 |
is_categorical() |
檢測分類數據 | 分類變量處理 |

~ 取反操作符
df[~ df['op']== 'add']
nsmallest 最小值

apply函數

query運算符
import pandas as pd
df = pd.DataFrame({
'A': [1, 2, 3, 4],
'B': ['x', 'y', 'z', 'x']
})
# 篩選A列大于2的行
result = df.query('A > 2')
print(result)
# 篩選B列為'x'或'y'的行
result = df.query("B in ['x', 'y']")
print(result)
query 方法支持鏈式操作
rolling 篩選

# 計算3日簡單移動平均
df['SMA_3'] = df['Close'].rolling(window=3).mean()
print(df[['Close', 'SMA_3']])
# 標記超出3σ范圍的異常點
df['Z-Score'] = (df['Close'] - df['Close'].rolling(30).mean()) / df['Close'].rolling(30).std()
df['Anomaly'] = df['Z-Score'].abs() > 3
sample隨機抽取
# 從列中隨機選擇2列
sampled_cols = df.sample(n=2, axis=1, random_state=42)
print(sampled_cols)
isna 方法

統計 isna 的數量
df.isna().sum(axis=1)
df.notna().sum(axis=1)
常用于矩陣求和計算,以下用法分為三種情況來介紹!
格式:np.sum(a)
np.sum(a, axis=0) ------->列求和
np.sum(a, axis=1) ------->行求和
注意:特別注意后兩種用法。

dropna/fillna/mask 方法
df.dropna(axis=0,how='any/all')


mask 可以按照條件填充
apply 及類型轉化
# 轉化為 str
df.id = df.id.apply(str)
df.id = df.id.astype(int)
1. 核心區別總結
| 特性 | astype() |
apply() |
|---|---|---|
| 主要用途 | 強制轉換整個列的數據類型 | 對數據執行復雜的自定義轉換 |
| 操作對象 | 整個列(向量化操作) | 可針對列、行或單個元素 |
| 性能 | 高效(底層C優化) | 較慢(Python循環) |
| 靈活性 | 僅支持預定義的類型轉換 | 支持任意Python函數 |
| 適用場景 | 簡單類型轉換(如字符串→數值) | 需要條件判斷、多列協作的復雜邏輯 |
where 方法 復雜條件修改
df1 = df.copy()
# 默認及格
df1['math_pass'] = '及格'
df1['math_pass'] = df1['math_pass'].where(df1['math'] > 60, '不及格')
cat 方法
>>>Series([‘a‘,‘b‘,‘c‘]).str.cat([‘A‘,‘B‘,‘C‘],sep=‘,‘)
merge 方法

df1 = pd.DataFrame({
'Dept': ['HR', 'IT', 'Finance'],
'EmpID': [101, 102, 103]
})
df2 = pd.DataFrame({
'Dept': ['IT', 'Finance', 'Marketing'],
'EmpID': [102, 103, 104],
'Salary': [7000, 8000, 9000]
})
# 按Dept和EmpID左連接
result = pd.merge(df1, df2, on=['Dept', 'EmpID'], how='left')
print(result)
clip 方法
import pandas as pd
data = {'value': [10, 25, 5, 30, 15]}
df = pd.DataFrame(data)
# 將'value'列的值限制在10和20之間
df['value'].clip(lower=10, upper=20, inplace=True)
print(df)
stack 方法 - 寬表轉長表

df_single_level = pd.DataFrame(
[['Mostly cloudy', 10], ['Sunny', 12]],
index=['London', 'Oxford'],
columns=['Weather', 'Wind']
)
df_single_level.stack()
浙公網安備 33010602011771號