【问题标题】:Get the name of a pandas DataFrame获取 pandas DataFrame 的名称
【发布时间】:2015-10-22 00:30:06
【问题描述】:

如何获取 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

【问题讨论】:

  • 你的意思是变量名吗?
  • 值得一读thisthis,以及其中的cmets和链接。

标签: python pandas dataframe attributes


【解决方案1】:

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

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

print df.name
>>>
Ones

希望对您有所帮助。

【讨论】:

  • 我需要将名称作为变量。将熊猫导入为 pd df = pd.DataFrame( data=np.ones([4,4]) ) df.name = 'df' print df.name >>> df
  • 对于后代,从 v 0.18.1 开始,not survive pickling (对于 v 0.18.1 使用 to_pickle/ read_pickle 而不是 save/load 如果试图重现GitHub 评论)。
  • 我发现的一种解决方法是将您的DataFrame 的名称放在索引的名称属性中(例如df.index.name = 'Ones')。这在酸洗过程中保持不变。这仅适用于您的 DataFrame 的索引尚未命名为有用的东西...
  • 这是一个糟糕的主意,因为如果你和drop 一样多,返回的对象将不再具有name 属性。这很诱人,但会产生莫名其妙的错误。
  • 真的是个坏主意。如果您调用 df.name = Ones 与 df['name] = 'Ones' 相同。这意味着该列的值将是“一”。所以这不是一个正确的答案。您可以将数据框存储在字典中并使用密钥来识别它们
【解决方案2】:

有时df.name 不起作用。

您可能会收到一条错误消息:

'DataFrame' 对象没有属性'name'

试试下面的功能:

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

【讨论】:

  • 当它没有分配任何名称时会抛出`'DataFrame' object has no attribute 'name'`
  • 只是为了确保人们不会感到困惑:这里的 sn-p 所做的是在所有当前定义的全局变量中查找数据帧并返回其变量名。这保证可以工作(例如,您的 DF 是局部变量)并且没有错误处理机制。仅当您确定自己在做什么时才应该使用它!
【解决方案3】:

在许多情况下,附加到pd.DataFrame 对象的自定义属性是不必要的。另外,注意pandas-object 属性may not serialize。所以酸洗会丢失这些数据。

相反,请考虑使用适当命名的键创建字典并通过 dfs['some_label'] 访问数据框。

df = pd.DataFrame()

dfs = {'some_label': df}

【讨论】:

    【解决方案4】:

    来自here 我理解的DataFrames 是:

    DataFrame 是一种二维标记数据结构,具有可能不同类型的列。您可以将其视为电子表格或 SQL 表,或 Series 对象的字典。

    系列是:

    Series 是一个带标签的一维数组,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。

    系列有一个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 的 cmets,我认为 OP 正在寻找类似的东西:

     >>> df = pd.DataFrame(...)
     >>> df.name = 'df' # making a custom attribute that DataFrame doesn't intrinsically have
     >>> print(df.name)
     'df'
    

    【讨论】:

    • 我需要名称是一个有点像 name= 的变量
    • 变量是什么意思?就像调用 df 打印名称 "df" 而不是打印数据框一样?
    • 是的。我就是这个意思。
    • 说文件名是apple.csv。我希望它像文件来自苹果一样打印出来。 --- 只有苹果必须是动态的,具体取决于 csv 文件的名称。
    • @leo,有什么解决办法吗?你得到不带引号的数据框名称了吗?
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-24
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 2017-11-15
      • 2018-03-19
      • 2019-09-26
      • 2021-04-19
      相关资源
      最近更新 更多