Python Pandas:有没有办法根据列表中的字符串获取子集数据帧

Posted

技术标签:

【中文标题】Python Pandas:有没有办法根据列表中的字符串获取子集数据帧【英文标题】:Python Pandas: Is there a way to obtain a subset dataframe based on strings in a list 【发布时间】:2022-01-15 02:00:28 【问题描述】:

我希望根据列表中的字符串值创建一个子集 df。

玩具模型示例:

data = 'month': ['January','February','March','April','May','June','July','August','September','October','November','December'],
        'days_in_month': [31,28,31,30,31,30,31,31,30,31,30,31]
        

df = pd.DataFrame(data, columns = ['month', 'days_in_month'])

summer_months = ['Dec', 'Jan', 'Feb']

contain_values = df[df['month'].str.contains(summer_months)] 
print (df)

这会因为contain_values = df[df['month'].str.contains(summer_months)]而失败

TypeError: unhashable type: 'list'

我知道contain_values = df[df['month'].str.contains('Dec')] 可以工作,但我想退回新的dataframe,其中包含夏季月份。甚至使用 ~ 函数的所有非夏季月份。

谢谢

【问题讨论】:

【参考方案1】:
>>> contain_values = df[df['month'].str.contains('|'.join(summer_months))]

>>> contain_values
       month  days_in_month
0    January             31
1   February             28
11  December             31

【讨论】:

感谢您的帮助 不客气。【参考方案2】:

您也可以使用.str 为您提供的服务:

df[df["month"].str[:3].isin(summer_months)]

输出

       month  days_in_month
0    January             31
1   February             28
11  December             31

您可以使用类似这样的方法使其更健壮(以防数据框中的名称大写不正确):

df[df["month"].str.capitalize().str[:3]]

【讨论】:

以上是关于Python Pandas:有没有办法根据列表中的字符串获取子集数据帧的主要内容,如果未能解决你的问题,请参考以下文章