根据字符串在每个循环中调用不同的变量

时间:2019-05-17 13:26:55

标签: python pandas

我有一个for循环,我想在每个循环中调用不同的pd.Dataframe,然后将特定的列(“ feedin”)添加到另一个数据帧中。变量名称由'feedin_'+ x组成。假设a,b和c。因此,在第一个循环中,我想调用变量feedin_a并将列“ feedin”添加到新的数据框中。在下一个feedin_b中,依此类推。

我传递了['a','b','c']的列表,并尝试合并feedin_ + a。但是由于列表由字符串参数组成,因此不会调用变量

feedin_a = pd.Dataframe
feedin_b = pd.Dataframe
feedin_c = pd.Dataframe

list = ['a', 'b', 'c']

for name in list:

df.new['feedin_'+name] = 'feedin_'+name['feedin']

这不起作用,因为该变量被称为字符串。希望你能解决我的问题。

3 个答案:

答案 0 :(得分:0)

这是在确实需要像列表这样的数据结构时使用变量feedin_afeedin_b并不是一个好主意的原因之一。

如果您无法更改此设置,则可以在locals()(或globals()字典中查找名称:

df.new['feedin_'+name] = locals()['feedin_'+name]['feedin']

答案 1 :(得分:0)

您可以使用locals(),所以它应该像这样:

feedin_a = pd.Dataframe
feedin_b = pd.Dataframe
feedin_c = pd.Dataframe

name_list = ['a', 'b', 'c']

for name in list:
    key = 'feedin_{}'.format(name)
    df.new[key] = locals()[key]

还要选中此Python, using two variables in getattr?

p.s。不要使用list作为变量名,因为它是内置的python对象

答案 2 :(得分:0)

其他人已通过使用locals()回答了您的确切问题。在评论中,有人指出了实现您所追求的目标的另一种方法:使用字典将“变量名”保存为字符串,可以通过字符串操作进行查找。

import pandas as pd

dataframes = dict()

letter_list = ['a', 'b', 'c']
for letter in letter_list:
    dataframes['feedin_'+letter] = pd.DataFrame()

for name in letter_list:
    dataframes['feedin_'+name].insert(0, 'feedin_'+name, None)

print(dataframes)
{'feedin_a': Empty DataFrame
Columns: [feedin_a]
Index: [], 'feedin_b': Empty DataFrame
Columns: [feedin_b]
Index: [], 'feedin_c': Empty DataFrame
Columns: [feedin_c]
Index: []}

如果您打算通过字符串操作大量调用DataFrames,那么这是一个不错的方法。