如何按顺序创建指定前缀列的DataFrame子集?解决赋值失效问题
解决Pandas循环赋值后DataFrame子集为空的问题
问题原因
你原来的代码中,subsets=[df1, df2]存储的是对初始空DataFrame对象的引用,但在循环里执行subset=df[subcol]时,只是将局部变量subset重新指向了新生成的DataFrame,并没有修改原列表subsets中的元素,也不会改变df1、df2原本的引用指向。因此循环结束后,df1和df2仍然是空的DataFrame。
修正方案
方案一:用字典存储结果后赋值
这种方法清晰直观,适合后续扩展更多子集的场景:
import pandas as pd data = {'radius_mean':[18, 21, 20, 11, 20], 'radius_se':[1, 0.5, 0.7, 0.4, 0.8], 'area_mean': [1001, 1326, 1203, 386, 1200], 'area_se': [153, 75, 94, 27, 95]} df=pd.DataFrame(data) subsets = {} features=['radius', 'area'] for feature in features: subcol = [col for col in df.columns if col.startswith(f"{feature}_")] subsets[feature] = df[subcol] df1 = subsets['radius'] df2 = subsets['area'] print("df1:\n", df1) print("\ndf2:\n", df2)
方案二:通过索引修改列表元素
直接操作列表的索引,修改列表中对应位置的元素,从而同步更新df1、df2:
import pandas as pd data = {'radius_mean':[18, 21, 20, 11, 20], 'radius_se':[1, 0.5, 0.7, 0.4, 0.8], 'area_mean': [1001, 1326, 1203, 386, 1200], 'area_se': [153, 75, 94, 27, 95]} df=pd.DataFrame(data) subsets = [pd.DataFrame(), pd.DataFrame()] features=['radius', 'area'] for idx, feature in enumerate(features): subcol = [col for col in df.columns if col.startswith(f"{feature}_")] subsets[idx] = df[subcol] df1, df2 = subsets print("df1:\n", df1) print("\ndf2:\n", df2)
方案三:直接生成子集(适合少量子集场景)
如果只需要生成两个子集,直接分别定义更简洁:
import pandas as pd data = {'radius_mean':[18, 21, 20, 11, 20], 'radius_se':[1, 0.5, 0.7, 0.4, 0.8], 'area_mean': [1001, 1326, 1203, 386, 1200], 'area_se': [153, 75, 94, 27, 95]} df=pd.DataFrame(data) df1 = df[[col for col in df.columns if col.startswith('radius_')]] df2 = df[[col for col in df.columns if col.startswith('area_')]] print("df1:\n", df1) print("\ndf2:\n", df2)
内容的提问来源于stack exchange,提问作者Sunny
相关产品推荐
相关产品推荐

