如何用for循环为多个DataFrame选择指定列?修改不生效问题
问题原因
循环里的i = i[['Name','Color']]只是让循环变量i指向了一个新的DataFrame切片对象,并没有修改原有的puppy_df和kitty_df。因为Python for循环中的变量i是原DataFrame的临时引用,当你给i重新赋值时,只是断开了它和原对象的关联,原对象本身不会被改动,所以循环结束后原DataFrame毫无变化。
解决办法
方法一:通过索引修改列表元素
直接遍历列表的索引,把修改后的DataFrame重新赋值回列表对应的位置,之后可以从列表中取出更新后的对象:
my_list = [puppy_df, kitty_df] for idx in range(len(my_list)): my_list[idx] = my_list[idx][['Name','Color']] # 更新原变量 puppy_df = my_list[0] kitty_df = my_list[1]
方法二:用字典存储并更新
把DataFrame放进字典,遍历字典的键来更新对应的值,再同步回原变量:
df_dict = {'puppy': puppy_df, 'kitty': kitty_df} for key in df_dict: df_dict[key] = df_dict[key][['Name','Color']] # 更新原变量 puppy_df = df_dict['puppy'] kitty_df = df_dict['kitty']
执行完任意一种方法后,再检查puppy_df.shape或kitty_df.shape,就能得到预期的(3, 2)结果。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

