提问者:小点点

在具有多个条件的代码中如何放置。low()以及在何处放置。low()?


我正在做一个(简单的)函数。 该函数根据用户输入(姓名和月份)在DF中进行搜索。 该守则将指定月份在那家商店消费的金额相加。

df中的名字有时用大写,有时不用。 所以我希望从df中提取的所有名称都是小写的,以及所有用户输入。

使名称输入小写是没有问题的。 但是我如何/在哪里写。在有多个条件的代码中更低?

因此,我的问题是:如何将.lower放在.str.contains(naam)部分的周围?

(下面的代码在正确的位置用大写字母键入姓名的一部分时工作良好)。

def euro_month():

    name = input('What shop are you looking for: ')
    name = (name.lower())
    month = input('Give the month number, 1 - 12: ')

    df = df_2019.loc[((df_2019['Name'].str.contains(name)))&(df_2019['Month'] == int(month))]

    bedrag = round(df['Bedrag'].sum(),2)

    print('We spent in shop', name, 'in month ', str(maand), ' 2019', bedrag, ' Euro's.' )

共2个答案

匿名用户

pandas str.contains()有一个参数使搜索不区分大小写https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.series.str.contains.html

在您的代码中:

df = df_2019.loc[((df_2019['Name'].str.contains(name, case=False)))&(df_2019['Month'] == int(month))]

或者可以使用str.lower()https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.series.str.lower.html

df = df_2019.loc[((df_2019['Name'].str.lower().str.contains(name, case=False)))&(df_2019['Month'] == int(month))]

匿名用户

这应该管用。

df = df_2019.loc[((df_2019['Name'].str.lower().str.contains(name))) & (df_2019['Month'] == int(month))]

您可以简单地调用.lower,然后调用.str.contains