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 文件?
Python、Pandas 和 for 循环:根据与列表值的匹配填充数据框行