本文目录导读:

- 使用
map()方法进行简单映射 - 使用
replace()方法进行批量替换 - 使用
apply()方法进行函数映射 - 使用
cut()方法进行连续数据分段 - 复杂映射示例:多条件映射
- 使用
assign()方法链式映射 - 使用字典和条件进行高级映射
- 性能优化:使用
np.select或np.where
我来详细介绍几种使用Pandas进行数据映射的方法:
使用 map() 方法进行简单映射
import pandas as pd
# 创建示例数据
df = pd.DataFrame({
'name': ['张三', '李四', '王五', '赵六'],
'gender': ['M', 'F', 'M', 'F'],
'grade': ['A', 'B', 'C', 'A']
})
# 性别映射字典
gender_map = {'M': '男', 'F': '女'}
df['gender_cn'] = df['gender'].map(gender_map)
print(df)
使用 replace() 方法进行批量替换
# 成绩等级映射
grade_map = {'A': '优秀', 'B': '良好', 'C': '及格', 'D': '不及格'}
df['grade_desc'] = df['grade'].replace(grade_map)
print(df)
使用 apply() 方法进行函数映射
# 使用自定义函数
def score_to_level(score):
if score >= 90:
return 'A'
elif score >= 80:
return 'B'
elif score >= 70:
return 'C'
elif score >= 60:
return 'D'
else:
return 'E'
# 创建成绩数据
df_scores = pd.DataFrame({
'student': ['小明', '小红', '小华', '小刚'],
'score': [95, 82, 73, 58]
})
df_scores['level'] = df_scores['score'].apply(score_to_level)
print(df_scores)
使用 cut() 方法进行连续数据分段
# 成绩分段 bins = [0, 60, 70, 80, 90, 100] labels = ['不及格', '及格', '中等', '良好', '优秀'] df_scores['grade'] = pd.cut(df_scores['score'], bins=bins, labels=labels) print(df_scores)
复杂映射示例:多条件映射
# 创建员工数据
df_emp = pd.DataFrame({
'emp_id': [1, 2, 3, 4, 5],
'department': ['技术部', '市场部', '技术部', '财务部', '市场部'],
'level': ['初级', '中级', '高级', '初级', '中级'],
'salary': [8000, 12000, 20000, 7500, 13000]
})
# 多条件映射函数
def get_bonus_rate(row):
"""根据部门和级别计算奖金系数"""
if row['department'] == '技术部':
if row['level'] == '高级':
return 0.3
elif row['level'] == '中级':
return 0.2
else:
return 0.1
elif row['department'] == '市场部':
if row['level'] == '高级':
return 0.25
elif row['level'] == '中级':
return 0.15
else:
return 0.08
else:
return 0.1
# 使用apply应用复杂函数
df_emp['bonus_rate'] = df_emp.apply(get_bonus_rate, axis=1)
df_emp['bonus'] = df_emp['salary'] * df_emp['bonus_rate']
print(df_emp)
使用 assign() 方法链式映射
# 链式操作创建多个映射列
df_transformed = df_scores.assign(
status=df_scores['score'].apply(lambda x: '通过' if x >= 60 else '未通过'),
rank=pd.cut(df_scores['score'], bins=[0, 60, 80, 100], labels=['C', 'B', 'A']),
weighted_score=df_scores['score'] * 0.9
)
print(df_transformed)
使用字典和条件进行高级映射
# 复杂映射示例
def classify_student(score, name_len):
"""根据分数和名字长度分类"""
if score >= 90 and name_len <= 2:
return '学霸短名'
elif score >= 90:
return '学霸'
elif score >= 70 and name_len <= 2:
return '中等短名'
elif score >= 70:
return '中等'
else:
return '需要加油'
df_scores['classification'] = df_scores.apply(
lambda row: classify_student(row['score'], len(row['student'])),
axis=1
)
print(df_scores)
性能优化:使用 np.select 或 np.where
import numpy as np
# 使用 np.select 进行条件映射
conditions = [
df_scores['score'] >= 90,
df_scores['score'] >= 80,
df_scores['score'] >= 70,
df_scores['score'] >= 60,
df_scores['score'] < 60
]
choices = ['优秀', '良好', '中等', '及格', '不及格']
df_scores['level_fast'] = np.select(conditions, choices, default='未知')
print(df_scores)
# 1. 简单字典映射 - 使用 map() # 2. 替换值 - 使用 replace() # 3. 函数映射 - 使用 apply() # 4. 连续值分段 - 使用 cut() # 5. 多条件映射 - 使用 apply() + 自定义函数 # 6. 链式操作 - 使用 assign() # 7. 条件选择 - 使用 np.select() 或 np.where()
选择建议:
- 简单映射:使用
map() - 批量替换:使用
replace() - 复杂函数:使用
apply() - 性能要求高:使用
np.select()或np.where() - 连续数据分段:使用
pd.cut()
这些方法可以灵活组合,满足各种数据映射需求。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播