获取 pandas DataFrame 的名称

问题描述 投票:0回答:8

如何获取 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
python pandas dataframe attributes
8个回答
86
投票

您可以使用以下内容命名数据框,然后在您喜欢的任何地方调用该名称:

import pandas as pd
df = pd.DataFrame( data=np.ones([4,4]) )
df.name = 'Ones'

print df.name
>>>
Ones

56
投票

有时

df.name
不起作用。

您可能会收到错误消息:

“DataFrame”对象没有属性“name”

尝试以下功能:

def get_df_name(df):
    name =[x for x in globals() if globals()[x] is df][0]
    return name

30
投票

在许多情况下,附加到

pd.DataFrame
对象的自定义属性是不必要的。另外,请注意
pandas
-对象属性可能不会序列化。所以pickle会丢失这些数据。

相反,请考虑使用适当命名的键创建一个字典,并通过

dfs['some_label']
访问数据帧。

df = pd.DataFrame()

dfs = {'some_label': df}

17
投票

DataFrame 没有名称,但您有一个可以使用的(实验)属性字典。例如:

df.attrs['name'] = "My name"   # Can be retrieved later

通过一些操作保留属性。


15
投票

这里我对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'

2
投票

我正在开发一个用于特征分析的模块,并且我有与您相同的需求,因为我想生成一个名为正在分析的 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


1
投票

这是一个示例函数: '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

0
投票

要在 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)
© www.soinside.com 2019 - 2024. All rights reserved.