我正在做一个(简单的)函数。 该函数根据用户输入(姓名和月份)在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.' )
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