使用pandas处理CSV数据的条件替换、分组与合并相关问题
多条件批量替换字段值
你当前用的loc写法本身就是pandas的矢量化操作,性能远高于循环遍历,完全可以满足高性能要求。如果要同时处理多组替换规则,不需要写多行loc,推荐用numpy.select实现批量映射,代码可维护性更高:
import numpy as np # 替换规则优先级从上到下,先匹配的规则先生效 conditions = [ # 规则1:term为2且科目含foreign language (df['term'] == '2') & (df['school_subject'].str.contains('foreign language', na=False)), # 规则2:科目含Informatics df['school_subject'].str.contains('Informatics', na=False) ] # 对应条件的替换值,顺序和conditions完全一致 replace_values = [ 'oth_lang', 'comp_sci' # 这里替换为你需要的Informatics对应的目标值即可 ] # 不匹配任何规则的保留原字段值 df['school_subject'] = np.select(conditions, replace_values, default=df['school_subject'])
如果仅需要筛选多组条件统一替换为同一个值,直接用|拼接条件放在单个loc里即可:
df.loc[ ((df['school_subject'].str.contains('foreign language')) & (df['term'] == '2')) | (df['school_subject'].str.contains('Informatics')), 'school_subject' ] = '统一替换值'
数据拆分与合并
按term拆分数据集(支持提前排除指定数据)
先执行排除逻辑过滤不需要的数据,再用groupby拆分即可:
# 示例:先排除所有科目为pe的无效数据,可按需修改过滤条件 filtered_df = df[df['school_subject'] != 'pe'].copy() # 按term拆分,生成key为term值、value为对应数据集的字典 term_df_dict = dict(tuple(filtered_df.groupby('term'))) # 直接取对应term的数据集 term1_df = term_df_dict.get('1') term2_df = term_df_dict.get('2')
多学期数据合并
用pd.concat即可完成合并,支持任意数量的同结构数据集拼接:
import pandas as pd # 合并term1和term2数据为全学年数据集,ignore_index=True重置行索引避免重复 full_year_df = pd.concat([term1_df, term2_df], ignore_index=True)
内容的提问来源于stack exchange,提问作者Sebastian
相关产品推荐
相关产品推荐

