我有很多我在脚本中早期定义的数据帧,我想迭代它们并像这样修改它们:
for df in [df_fap, df_spf, df_skin, ...]:
df = df.filter(regex=(assay + r"[0-9]+"))
然而,这不起作用。循环结束时,不会修改数据帧的值。我偶然发现了post这个稍微相似(除了我事先定义了我的变量),但它并没有真正解决我的确切问题。谢谢!
答案 0 :(得分:2)
循环变量df
又分配给列表中的每个元素。如果您重新分配df
,那么您已df
提及其他内容。它不会影响列表。
在迭代列表时重新分配循环变量并不会改变列表,更不用说改变用于填充列表的变量了。
new_list = [df.filter(whatever) for df in (df_fap, df_spf, df_skin, ...)]
如果您还想重新分配起始变量,可以使用:
df_fap, df_spf, df_skin, ... = new_list
你甚至可以一次性完成这两项操作:
df_fap, df_spf, df_skin, ... = [df.filter(whatever) for df in (df_fap, df_spf, df_skin, ...)]
答案 1 :(得分:1)
所以你有变量列表
[df_fap, df_spf, df_skin, ...]
当你循环“创建新变量
时for df in [df_fap, df_spf, df_skin, ...]:
df = value
你的for的每次迭代(循环)都会重置df的值,这意味着你的变量都不会改变
khelwood给出的答案意味着您将重新声明所有变量并将过滤器应用于一个
df_fap, df_spf, df_skin, ... = [df_fap, df_spf, df_skin, ...]
尝试做类似
的事情a,b = ["apple","banana"]
在你的控制台中,khelwood的解释将有意义
答案 2 :(得分:0)
尝试
-Djava.net.preferIPv4Stack=true