【问题标题】:Using the DataFrame index in string format as instance of a class使用字符串格式的 DataFrame 索引作为类的实例
【发布时间】:2021-10-26 19:53:02
【问题描述】:

创建 DataFrame 和类后,我想使用索引作为创建类的实例。听起来很奇怪,但让我解释一下:D

例如我有这个 Dataframe df:

  Name 'Jane' 'Max'

  Age   25     20 

NameAge 是字符串类型的索引。 我想将它转换为一个对象,以便我可以将它用作“I_am_a_class”类的实例,如下所示:

  df.index[0]
  output: 'Name'

  df.index[0] = I_am_a_class(attributes) 
  df.index[1] = I_am_a_class(attributes)

这不起作用,因为df.index[0] 是字符串格式。 我想知道是否有办法将df.index 转换为适当的格式,以便实现这一点?

【问题讨论】:

    标签: python pandas string class instance


    【解决方案1】:

    编辑:感谢您解释您的目标是什么。如果您的数据框中只有几个条目,您可以执行以下操作:

    import pandas as pd
    
    class legend():
        def __init__(self,unit,meaning):
            self.unit= unit
            self.meaning= meaning
        
        
    df = pd.DataFrame(
        data = {
            'unit':['m/s','Pa'],
            'meaning':['distance moved divided by the time','force divided by the area'], 
        },
        index=['velocity','pressure'],
    )
    
    velocity = legend(df.loc['velocity','unit'], df.loc['velocity','meaning'])
    pressure = legend(df.loc['pressure','unit'], df.loc['pressure','meaning'])
    
    
    print(velocity.unit)
    print(velocity.meaning)
    

    如果您的数据框中的行数过多或数量不定,因此您无法像上面那样手动创建变量,并且如果您出于某种原因真的不想使用字典,那么您可以执行以下操作,但不赞成:

    import pandas as pd
    
    class Legend():
        def __init__(self,unit,meaning):
            self.unit= unit
            self.meaning= meaning
        
        
    df = pd.DataFrame(
        data = {
            'unit':['m/s','Pa'],
            'meaning':['distance moved divided by the time','force divided by the area'], 
        },
        index=['velocity','pressure'],
    )
    
    #If you REALLY don't want to use a dictionary you can use exec to create arbitrary variable names
    #This is bad practice in python. You can read more about it at the link below
    #https://stackoverflow.com/questions/5036700/how-can-you-dynamically-create-variables-via-a-while-loop
    for i,r in df.iterrows():
        exec('{} = Legend("{}","{}")'.format(i,r['unit'],r['meaning']))
    
    
    print(velocity.unit)
    print(velocity.meaning)
    

    【讨论】:

      猜你喜欢
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-10
      • 1970-01-01
      相关资源
      最近更新 更多