【问题标题】:How to get value based on a list of strings? If not in list then get Value Error如何根据字符串列表获取价值?如果不在列表中,则获取值错误
【发布时间】:2021-08-08 11:12:54
【问题描述】:

我有一些数据,想知道如何根据下面的字符串列表获取值。

我的数据是以年数作为索引的有很多钱的人,如果该名称不在该数据框中,我希望引发值错误。

 index      Bob       Andy       
 2000      50000     30000       
 2001      200000    400000      
 2003      250000    340000      
 ....      ....      .......      

这个数据框中只有两个人的 Money total 数据。如果像 Ben 一样插入一个人的名字(本不在 df 中),我希望引发一个 ValueError,但如果插入 Bob,他的总金额将显示为一个带有年份的数组。

我的函数atm:

def get_money_total(name = 'Bob'):

   list = ['Bob','Andy']

   if get_money_total == list:
          return np.array(df[['index',name]])
   
   else: 
       raise ValueError

当我输入时使用上面的这个函数:

get_money_total('Andy') 

它只是给了我一个 Valuerror 但 andy 在数据框和列表中,所以为什么它不给我带有值的数组?

【问题讨论】:

    标签: python arrays pandas list dataframe


    【解决方案1】:

    这里首先是一个创建数据框的可重现示例。

    import pandas as pd
    
    df = {'Bob': [1000, 3000], 'Andy': [2000, 2100]}
    
    # Create DataFrame
    df = pd.DataFrame(df)
    

    你需要的函数应该是这样的

    def get_money_total(df, name = 'Bob'): 
    
       if name in list(df.columns):
              return df[name]
       else: 
           raise ValueError
    

    作为参数,您有数据框和要检查的名称。请注意,如果您编写 name = 'Bob',则默认名称参数是 Bob。

    输出如下所示

    # with default name = 'Bob'
    get_money_total(df=df) 
    
    Out[9]: 
    0    1000
    1    3000
    Name: Bob, dtype: int64
    

    输出的名称不是数据框的列名

    get_money_total(df=df, name = 'Ben')
    Traceback (most recent call last):
    
      File "<ipython-input-14-72369a2c95ba>", line 1, in <module>
        get_money_total(df=df, name = 'Ben')
    
      File "<ipython-input-12-f6cbe827aeeb>", line 7, in get_money_total
        raise ValueError
    
    ValueError
    

    【讨论】:

    • 而且您不应该将名称列表用于list = ['Bob','Andy'] 之类的列表,而应使用mylist = ['Bob', 'Andy'] 之类的名称,因为关键字列表已用于将元素更改为列表元素,就像我在这里所做的那样list(df.columns)
    【解决方案2】:

    问题是您将函数类型与列表进行比较,这总是错误的。 您要检查的名称是否存在于索引列表中。

    【讨论】:

    • 加个例子,指出问题出在哪里给原贴;他们可能不知道如何检查名称是否存在于索引列表中或函数类型是什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多