Python自动化办公应用学习笔记63—Pandas库操作Excel文件4

第四部分:数据选择与操作

4.1 数据选择方法大全

基础选择方法

# 选择单列(返回Series)

product_names = df['产品名称']

# 选择多列(返回DataFrame)

product_info = df[['产品编号', '产品名称', '价格']]

# 选择行切片

first_10 = df[:10] # 前10行

last_5 = df[-5:] # 后5行

middle_slice = df[10:20] # 第11-20行

Python自动化办公应用学习笔记63—Pandas库操作Excel文件4

高级索引器应用

loc索引器(基于标签的索引):

# 选择单个值

value = df.loc[5, '产品名称'] # 第6行,产品名称列的值

# 选择行和列范围

subset = df.loc[10:20, '产品名称':'价格'] # 行标签10-20,列从产品名称到价格

# 条件选择

high_sales = df.loc[df['销售额'] > 10000, ['产品名称', '销售额', '利润']]

# 多条件选择

beijing_high_sales = df.loc[

(df['销售额'] > 10000) & (df['地区'] == '北京'),

['产品名称', '销售额', '地区']

]

iloc索引器(基于位置的索引):

# 选择单个值

value = df.iloc[0, 1] # 第一行第二列

# 选择行和列位置范围

subset = df.iloc[0:5, 1:4] # 前5行,第2-4列

# 选择不连续的位置

subset = df.iloc[[0, 2, 4], [1, 3, 5]] # 第1、3、5行,第2、4、6列

# 选择所有行的特定列

all_rows_subset = df.iloc[:, [1, 3, 5]] # 所有行,第2、4、6列

Python自动化办公应用学习笔记63—Pandas库操作Excel文件4

条件筛选技巧

# 单条件筛选

high_sales = df[df['销售额'] > 10000]

# 多条件筛选(使用括号确保运算顺序)

beijing_high_sales = df[(df['销售额'] > 10000) & (df['地区'] == '北京')]

# 复杂条件组合

complex_filter = df[

(df['销售额'] > 10000) |

((df['销售量'] > 500) & (df['利润率'] > 0.2))

]

# 使用query方法(更简洁的语法)

result = df.query('销售额 > 10000 and 地区 == “北京”')

result = df.query('销售额 > @threshold', local_dict={'threshold': 10000})

Python自动化办公应用学习笔记63—Pandas库操作Excel文件4

4.2 数据排序与排名

值排序操作

# 单列排序

df_sorted = df.sort_values('销售额') # 升序

df_sorted = df.sort_values('销售额', ascending=False) # 降序

# 多列排序

df_sorted = df.sort_values(['地区', '销售额'], ascending=[True, False])

# 忽略索引重置(生成新的连续索引)

df_sorted = df.sort_values('销售额', ignore_index=True)

# 处理缺失值位置

df_sorted = df.sort_values('销售额', na_position='first') # 缺失值放在前面

Python自动化办公应用学习笔记63—Pandas库操作Excel文件4

自定义排序实现

# 定义自定义顺序

custom_order = ['华东', '华北', '华南', '西南', '西北', '东北']

df['地区'] = pd.Categorical(df['地区'], categories=custom_order, ordered=True)

df_sorted = df.sort_values('地区')

# 自定义函数排序

def custom_sort_key(value):

order_dict = {'高': 3, '中': 2, '低': 1}

return order_dict.get(value, 0)

df_sorted = df.iloc[df['优先级'].apply(custom_sort_key).argsort()]

排名计算应用

# 标准排名(并列排名占用后续名次)

df['销售额排名'] = df['销售额'].rank(ascending=False)

# 密集排名(并列排名不占用后续名次)

df['密集排名'] = df['销售额'].rank(method='dense', ascending=False)

# 最小排名(并列排名使用最好名次)

df['最小排名'] = df['销售额'].rank(method='min', ascending=False)

# 组内排名

df['组内排名'] = df.groupby('地区')['销售额'].rank(ascending=False)

# 百分比排名

df['百分比排名'] = df['销售额'].rank(pct=True)

Python自动化办公应用学习笔记63—Pandas库操作Excel文件4

第五部分:数据处理与转换

5.1 创建与修改数据

添加新列的方法

# 基本算术运算

df['总价'] = df['单价'] * df['数量']

df['利润率'] = (df['销售额'] – df['成本']) / df['销售额']

# 使用apply方法应用自定义函数

def price_category(price):

if price < 100:

return '低价'

elif price < 500:

return '中价'

else:

return '高价'

df['价格类别'] = df['单价'].apply(price_category)

# 使用lambda函数

df['价格级别'] = df['单价'].apply(lambda x: '高' if x > 500 else '低')

# 向量化操作(推荐,性能最优)

df['折扣价'] = df['单价'] * 0.9

df['是否畅销'] = df['销售量'] > 100

数据修改技巧

# 条件修改

df.loc[df['销量'] > 100, '状态'] = '热销'

df.loc[df['库存'] < 10, '状态'] = '缺货'

# 批量修改值

df['价格'] = df['价格'].replace(0, np.nan) # 将0替换为NaN

df['类别'] = df['类别'].replace({'old': 'new'}) # 值替换

# 使用map进行映射转换

size_map = {'S': 'Small', 'M': 'Medium', 'L': 'Large'}

df['尺寸描述'] = df['尺寸'].map(size_map)

# 使用replace进行多值替换

df['地区'] = df['地区'].replace({

'BJ': '北京',

'SH': '上海',

'GZ': '广州',

'SZ': '深圳'

})

文本数据处理

# 字符串操作

df['姓名'] = df['姓名'].str.title() # 首字母大写

df['邮箱'] = df['邮箱'].str.lower() # 转换为小写

df['地址'] = df['地址'].str.strip() # 去除首尾空格

# 字符串提取

df['域名'] = df['网址'].str.extract(r'://(.*?)/') # 提取域名

df['区号'] = df['电话'].str[:3] # 提取前3位作为区号

# 字符串分割

df[['姓', '名']] = df['全名'].str.split(' ', expand=True, n=1)

# 字符串包含检测

df['是否VIP'] = df['客户等级'].str.contains('VIP', case=False)

# 字符串长度

df['名称长度'] = df['产品名称'].str.len()

日期时间处理

# 确保日期列格式正确

df['日期'] = pd.to_datetime(df['日期'])

# 日期提取

df['年份'] = df['日期'].dt.year

df['月份'] = df['日期'].dt.month

df['季度'] = df['日期'].dt.quarter

df['星期'] = df['日期'].dt.day_name()

df['是否周末'] = df['日期'].dt.dayofweek >= 5

# 日期计算

df['天数差'] = (df['结束日期'] – df['开始日期']).dt.days

df['三个月后'] = df['日期'] + pd.DateOffset(months=3)

# 日期格式化

df['日期字符串'] = df['日期'].dt.strftime('%Y年%m月%d日')

Python自动化办公应用学习笔记63—Pandas库操作Excel文件4

5.2 分组与聚合操作

分组操作基础

# 单维度分组

grouped = df.groupby('地区')

# 多维度分组

multi_grouped = df.groupby(['地区', '产品类别'])

# 迭代分组结果

for name, group in df.groupby('地区'):

print(f”地区: {name}, 记录数: {len(group)}”)

# 可以对每个分组进行特定操作

# 获取特定分组

beijing_group = df.groupby('地区').get_group('北京')

聚合计算方法

# 单指标多聚合函数

result = df.groupby('地区')['销售额'].agg(['sum', 'mean', 'count', 'std'])

# 多指标不同聚合函数

agg_dict = {

'销售额': ['sum', 'mean'],

'利润': 'sum',

'数量': 'count',

'单价': 'mean'

}

result = df.groupby('地区').agg(agg_dict)

# 重命名聚合结果列

agg_dict_named = {

'销售额': [('总销售额', 'sum'), ('平均销售额', 'mean')],

'利润': [('总利润', 'sum')]

}

result = df.groupby('地区').agg(agg_dict_named)

# 自定义聚合函数

def profit_margin(group):

“””计算利润率”””

return (group['利润'].sum() / group['销售额'].sum()) * 100

result = df.groupby('地区').apply(profit_margin)

Python自动化办公应用学习笔记63—Pandas库操作Excel文件4

分组数据处理

# 分组后转换(保持原数据形状)

df['组内占比'] = df.groupby('地区')['销售额'].transform(lambda x: x / x.sum())

df['组内标准化'] = df.groupby('地区')['销售额'].transform(lambda x: (x – x.mean()) / x.std())

# 分组排名

df['地区内排名'] = df.groupby('地区')['销售额'].rank(ascending=False)

# 分组筛选

def filter_top_n(group, n=3):

“””筛选每个组的前N名”””

return group.nlargest(n, '销售额')

top_products = df.groupby('地区').apply(filter_top_n, n=3)

# 分组应用复杂函数

def calculate_stats(group):

“””计算组的统计指标”””

return pd.Series({

'记录数': len(group),

'总销售额': group['销售额'].sum(),

'平均利润': group['利润'].mean(),

'最大销量': group['数量'].max()

})

group_stats = df.groupby('地区').apply(calculate_stats)

© 版权声明

相关文章

3 条评论

  • 头像
    维克多和两横两竖 读者

    63

    无记录
    回复
  • 头像
    道易学堂 读者

    收藏了,感谢分享

    无记录
    回复
  • 头像
    聆亦筱屿鹿 读者

    感谢分享👏

    无记录
    回复