如何获取 DataFrame 的名称并将其打印为字符串?
示例:
boston
(分配给 csv 文件的变量名称)
import pandas as pd
boston = pd.read_csv('boston.csv')
print('The winner is team A based on the %s table.) % boston
您可以使用以下内容命名数据框,然后在您喜欢的任何地方调用该名称:
import pandas as pd
df = pd.DataFrame( data=np.ones([4,4]) )
df.name = 'Ones'
print df.name
>>>
Ones
有时
df.name
不起作用。
您可能会收到错误消息:
“DataFrame”对象没有属性“name”
尝试以下功能:
def get_df_name(df):
name =[x for x in globals() if globals()[x] is df][0]
return name
在许多情况下,附加到
pd.DataFrame
对象的自定义属性是不必要的。另外,请注意pandas
-对象属性可能不会序列化。所以pickle会丢失这些数据。
相反,请考虑使用适当命名的键创建一个字典,并通过
dfs['some_label']
访问数据帧。
df = pd.DataFrame()
dfs = {'some_label': df}
DataFrame 没有名称,但您有一个可以使用的(实验)属性字典。例如:
df.attrs['name'] = "My name" # Can be retrieved later
通过一些操作保留属性。
从这里我对DataFrame的理解是:
DataFrame 是一种二维标记数据结构,具有可能不同类型的列。您可以将其视为电子表格或 SQL 表,或 Series 对象的字典。
系列有:
Series 是一个一维标记数组,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。
Series 有一个
name
属性,可以像这样访问:
In [27]: s = pd.Series(np.random.randn(5), name='something')
In [28]: s
Out[28]:
0 0.541
1 -1.175
2 0.129
3 0.043
4 -0.429
Name: something, dtype: float64
In [29]: s.name
Out[29]: 'something'
编辑:根据OP的评论,我认为OP正在寻找类似的东西:
>>> df = pd.DataFrame(...)
>>> df.name = 'df' # making a custom attribute that DataFrame doesn't intrinsically have
>>> print(df.name)
'df'
我正在开发一个用于特征分析的模块,并且我有与您相同的需求,因为我想生成一个名为正在分析的 pandas.Dataframe 的报告。为了解决这个问题,我使用了@scohe001和@LeopardShark提出的相同解决方案,最初在https://stackoverflow.com/a/18425523/8508275中,使用检查库实现:
import inspect
def aux_retrieve_name(var):
callers_local_vars = inspect.currentframe().f_back.f_back.f_locals.items()
return [var_name for var_name, var_val in callers_local_vars if var_val is var]
注意附加的 .f_back 术语,因为我打算从另一个函数调用它:
def header_generator(df):
print('--------- Feature Analyzer ----------')
print('Dataframe name: "{}"'.format(aux_retrieve_name(df)))
print('Memory usage: {:03.2f} MB'.format(df.memory_usage(deep=True).sum() / 1024 ** 2))
return
使用给定的数据帧运行此代码,我得到以下输出:
header_generator(trial_dataframe)
--------- 特征分析器 ----------
数据框名称:“Trial_dataframe”
内存使用量:63.08 MB
这是一个示例函数: 'df.name = file` :下面代码中的第六行
def df_list():
filename_list = current_stage_files(PATH)
df_list = []
for file in filename_list:
df = pd.read_csv(PATH+file)
df.name = file
df_list.append(df)
return df_list
要在 Python 中获取 DataFrame 的变量名称,您无法直接使用本机 Python 或 pandas 属性来完成。但是,您可以通过检查 globals() 或 locals() 字典来匹配 ID 来使用解决方法。这是一个可以查找 DataFrame 名称的函数:
def find_df_name(df):
name = [name for name, obj in globals().items() if id(obj) == id(df)]
return name[0] if name else None
用途:
df_name = find_df_name(burnishing_defects)
print(df_name)