在ipython中,如何获取特定类型且具有模式的所有局部变量的列表?
In ipython, how to get a list of all local variables of a specific type and with a pattern?
比如我在工作space中创建了5个pd.DataFrame
,分别是:
trade_i = pd.DataFrame(np.random.rand(5, 2))
trade_xt = pd.DataFrame(np.random.rand(5, 2))
trade_mmt = pd.DataFrame(np.random.rand(5, 2))
trade_pg = pd.DataFrame(np.random.rand(5, 2))
trade_fg = pd.DataFrame(np.random.rand(5, 2))
可以看到,类型都是pandas.core.frame.DataFrame
,并且以trade_
:
开头
type(trade_fg)
Out[508]: pandas.core.frame.DataFrame
那么,我怎样才能 return 列出它们呢?不只是 return 列表中变量的名称。
到目前为止,我可以在如下列表中获取变量 startswtih trade_
的名称:
df_list = [x for x in dir() if x.startswith('trade_')]
df_list
Out[514]:
['trade_i',
'trade_xt',
'trade_mmt',
'trade_pg',
'trade_fg']
但这不是我想要的。
顺便说一句,我想要 return 列表中的这些数据帧变量的原因是为每个变量附加一列。
因为您只使用自己创建的字符串,所以使用 eval
获取它们的值是安全的:
local_trade_variables = {x:eval(x) for x in dir() if x.startswith('trade_')}
制作名称到值的字典
或者您可以直接使用 locals()
而无需 dir()
这是 已经 局部变量的字典:
local_trade_variables = {key:val for key,val in locals().items() if key.startswith('trade_')}
您可以使用 eval()
通过名称接收变量的引用,并使用 isinstance()
检查它是否是一个 DataFrame
像这样:
[eval(v) for v in dir()
if isinstance(eval(v), pd.DataFrame) and v.startswith('trade_')]
按照建议,您可能想要创建一个字典 - 但您不需要该名称信息。在那种情况下,列表就足够了:
import pandas as pd
df = pd.DataFrame([4,5,6])
trade_df = pd.DataFrame([1,2,3])
data_frames = dict([(v, eval(v)) for v in dir()
if isinstance(eval(v), pd.DataFrame) and v.startswith('trade_')])
比如我在工作space中创建了5个pd.DataFrame
,分别是:
trade_i = pd.DataFrame(np.random.rand(5, 2))
trade_xt = pd.DataFrame(np.random.rand(5, 2))
trade_mmt = pd.DataFrame(np.random.rand(5, 2))
trade_pg = pd.DataFrame(np.random.rand(5, 2))
trade_fg = pd.DataFrame(np.random.rand(5, 2))
可以看到,类型都是pandas.core.frame.DataFrame
,并且以trade_
:
type(trade_fg)
Out[508]: pandas.core.frame.DataFrame
那么,我怎样才能 return 列出它们呢?不只是 return 列表中变量的名称。
到目前为止,我可以在如下列表中获取变量 startswtih trade_
的名称:
df_list = [x for x in dir() if x.startswith('trade_')]
df_list
Out[514]:
['trade_i',
'trade_xt',
'trade_mmt',
'trade_pg',
'trade_fg']
但这不是我想要的。 顺便说一句,我想要 return 列表中的这些数据帧变量的原因是为每个变量附加一列。
因为您只使用自己创建的字符串,所以使用 eval
获取它们的值是安全的:
local_trade_variables = {x:eval(x) for x in dir() if x.startswith('trade_')}
制作名称到值的字典
或者您可以直接使用 locals()
而无需 dir()
这是 已经 局部变量的字典:
local_trade_variables = {key:val for key,val in locals().items() if key.startswith('trade_')}
您可以使用 eval()
通过名称接收变量的引用,并使用 isinstance()
检查它是否是一个 DataFrame
像这样:
[eval(v) for v in dir()
if isinstance(eval(v), pd.DataFrame) and v.startswith('trade_')]
按照建议,您可能想要创建一个字典 - 但您不需要该名称信息。在那种情况下,列表就足够了:
import pandas as pd
df = pd.DataFrame([4,5,6])
trade_df = pd.DataFrame([1,2,3])
data_frames = dict([(v, eval(v)) for v in dir()
if isinstance(eval(v), pd.DataFrame) and v.startswith('trade_')])