如何根据字典定义的列名前缀将pandas DataFrame拆分为多个子表
Pandas按列名前缀拆分DataFrame解决方案
错误原因
- 变量名不匹配:你定义的分组规则字典名为
groups,循环中调用的groupings属于未定义变量,会直接触发报错 - 参数格式不符合要求:
pd.Series.str.startswith()方法如果要同时匹配多个前缀,需要传入元组类型的参数,原代码传入嵌套列表[v],类型不匹配导致筛选失败
修正后代码
import pandas as pd import numpy as np # 初始化示例数据 df = pd.DataFrame(np.random.randint(0,5,size=(5, 10)), columns=('a_group1_sub','a_group1_actual','b_group1_sub','b_group1_actual','b_group2_total','b_group2_sub','b_group2_expected','class_first','class_second','area_x')) groups = {1: ['a_group1'], 2: ['b_group1', 'b_group2'], 3: ['class', 'area']} # 拆分后的子表存入字典 split_dfs = {} for k, prefixes in groups.items(): # 把前缀列表转成元组传入startswith方法 filter_mask = df.columns.str.startswith(tuple(prefixes)) split_dfs[f'df{k}'] = df.loc[:, filter_mask] # 按需取出子表 df1 = split_dfs['df1'] df2 = split_dfs['df2'] df3 = split_dfs['df3']
结果验证
可以通过打印子表列名确认拆分正确:
print(df1.columns) # 输出:Index(['a_group1_sub', 'a_group1_actual'], dtype='object') print(df2.columns) # 输出:Index(['b_group1_sub', 'b_group1_actual', 'b_group2_total', 'b_group2_sub', 'b_group2_expected'], dtype='object') print(df3.columns) # 输出:Index(['class_first', 'class_second', 'area_x'], dtype='object')
内容的提问来源于stack exchange,提问作者an10b3
相关产品推荐
相关产品推荐

