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

2024-06-25 23:05:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个for循环,我想调用一个不同的pd.数据帧在每个循环中,向另一个数据帧添加一列(“feedin”)。变量名由feedin+x组成。假设a、b和c。因此,在第一个循环中,我要调用变量feedin并将列feedin添加到新的数据帧中。在下一个feedin\u 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']

它不起作用,因为变量被称为字符串。我希望你能理解我的问题。你知道吗


Tags: 数据字符串nameindataframedf列表new
3条回答

这就是为什么当您真的需要一个数据结构(比如列表)时,使用变量feedin_afeedin_b不是一个好主意的原因之一。你知道吗

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

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

其他人用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: []}

如果您打算通过字符串操作调用大量的数据帧,这是一个很好的方法。你知道吗

可以使用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?

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

相关问题 更多 >