python:遍历数据帧列表和列表列表
python: loop through list of dataframes and list of lists
我有一个数据框列表 (lst_dfs),我想使用部分列名列表 (lst) 对其中的列进行子集化。列的列表需要使用 startswith 来应用,因为有时标识符的结尾不同。数据框列表的索引与名称列表的索引相匹配。它很容易应用于一个数据帧,但不适用于此 list/in 循环。
预期的输出将是一个字典,其中包含两个数据帧的列表,这些数据帧具有子集列但返回空。我认为我的迭代级别不正确(除其他外?)。非常感谢任何帮助。非常感谢!
我放入列表的两个数据框
df1 = pd.DataFrame(data={'x':[1,2,3,4,5],
'am.1': [1,1,1,1,1],
'abn.1': [1,1,1,1,1],
'b1c': [1,1,1,1,1],
'b1d': [1,1,1,1,1]})
df2 = pd.DataFrame(data={'x':[1,2,3,4,5],
'am.1': [1,1,1,1,1],
'am.1': [1,1,1,1,1],
'al.2': [1,1,1,1,1],
'b1d': [1,1,1,1,1],
'b2d': [1,1,1,1,1]})
lst_dfs = [df1, df1]
lst = (['a','b'],['am','b1'])
dat={}
for i, df in enumerate(lst_dfs):
for elem in lst:
print(elem)
dat[i] = df.loc[(df.columns.str.startswith(str(elem)))]
使用 df.filter
和 regex
参数来过滤掉列表中以元素开头的列:
from collections import defaultdict
dat = defaultdict(list)
for i, df in enumerate(lst_dfs):
for elem in lst:
dat[i].append(df.filter(regex='^('+'|'.join(elem)+')', axis=1))
输出:
>>> dat[0]
[ am.1 abn.1 b1c b1d
0 1 1 1 1
1 1 1 1 1
2 1 1 1 1
3 1 1 1 1
4 1 1 1 1, am.1 b1c b1d
0 1 1 1
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1]
我有一个数据框列表 (lst_dfs),我想使用部分列名列表 (lst) 对其中的列进行子集化。列的列表需要使用 startswith 来应用,因为有时标识符的结尾不同。数据框列表的索引与名称列表的索引相匹配。它很容易应用于一个数据帧,但不适用于此 list/in 循环。 预期的输出将是一个字典,其中包含两个数据帧的列表,这些数据帧具有子集列但返回空。我认为我的迭代级别不正确(除其他外?)。非常感谢任何帮助。非常感谢!
我放入列表的两个数据框
df1 = pd.DataFrame(data={'x':[1,2,3,4,5],
'am.1': [1,1,1,1,1],
'abn.1': [1,1,1,1,1],
'b1c': [1,1,1,1,1],
'b1d': [1,1,1,1,1]})
df2 = pd.DataFrame(data={'x':[1,2,3,4,5],
'am.1': [1,1,1,1,1],
'am.1': [1,1,1,1,1],
'al.2': [1,1,1,1,1],
'b1d': [1,1,1,1,1],
'b2d': [1,1,1,1,1]})
lst_dfs = [df1, df1]
lst = (['a','b'],['am','b1'])
dat={}
for i, df in enumerate(lst_dfs):
for elem in lst:
print(elem)
dat[i] = df.loc[(df.columns.str.startswith(str(elem)))]
使用 df.filter
和 regex
参数来过滤掉列表中以元素开头的列:
from collections import defaultdict
dat = defaultdict(list)
for i, df in enumerate(lst_dfs):
for elem in lst:
dat[i].append(df.filter(regex='^('+'|'.join(elem)+')', axis=1))
输出:
>>> dat[0]
[ am.1 abn.1 b1c b1d
0 1 1 1 1
1 1 1 1 1
2 1 1 1 1
3 1 1 1 1
4 1 1 1 1, am.1 b1c b1d
0 1 1 1
1 1 1 1
2 1 1 1
3 1 1 1
4 1 1 1]