我有一个Pandas DataFrame,它有列'Var_1_Access'
、'Var_2_Access'
,。。。'Var_N_Access'
,并且在这些列之间还有我想要查找的其他信息/列。例如:
data = pd.read_csv('File')
df = pd.Dataframe(data)
print(df.columns)
Index = (['Var_1', 'Var_1_Access', 'Var_1_comp1', 'Var_1_comp2', 'Var_2', 'Var_2_Access', 'Var_2_comp1', 'Var_2_comp2'], dtype='object')
我想写一个for循环,它穿过N的范围,将'Var_1_Access'
拉到'Var_N_Access'
。
我试过:
Access_Matrix = []
for i in range(1, N + 1):
Access_Matrix.append(df.f"Var_%i_Access" % i)
Access_Matrix = []
for i in range(1, N + 1):
Access_Matrix.append(df.Var_{i}_Access)
Access_Matrix = []
for i in range(1, N + 1):
Access_Matrix.append(df.Var_[i]_Access)
这些都会导致错误。是的,可以只写它们,因为N很小,但N会变大,我真的不想单独键入每个变量名,而是对其进行索引。最终目标是读取N个变量的Pandas数据帧信息,并使Access_Matrix
的形状为[len(Var_N_Access), N]
。此外,稍后可能需要在这些特定变量名之间添加更多信息,因此我希望通过字符串变量名与列索引对其进行索引,并寻找模式。
如果有必要,我可以提供更多信息,但我认为这涵盖了必要的信息。
您将无法使用"."符号,但您应该能够在带有"f"字符串的方括号中执行此操作。
for i in range(1, N + 1):
Access_Matrix.append(df[f"Var_{i}_Access"])
或者,也许更好的方法是建立一个列名列表,并从df
一次性将它们提取到一个新的数据帧中,例如:
cols = [f"Var_{i}_Access" for i in range(1, N+1)]
all_cols = df[cols]
使用熊猫。DataFrame.filter
它将使用正则表达式过滤列,并生成过滤版本
access_df = df.filter(regex=f'Var_d_Access')
对于N
的特定值或直到某个范围,
access_df = df.filter(regex=f'Var_[1-{N}]_Access')
这种方法比使用粗环要有效得多。