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:有没有办法根据列表中的字符串获取子集数据帧的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法将 excel 工作簿中的单个工作表导出到使用 pandas 分隔 csv 文件?

Pandas - 根据另一个列表中的索引对列表中的值求和

Python、Pandas 和 for 循环:根据与列表值的匹配填充数据框行

根据另一列从 Pandas 系列中的列表中选择元素

根据另一个数据框 python pandas 替换列值 - 更好的方法?

如何在 python 中使用 pandas 获取所有重复项的列表?