python - 如何提取具有混合值的行
问题描述
我必须从熊猫数据框中提取具有“出生日期”列中的值的行,这些值出现在带有日期的列表中。
import pandas as pd
df = pd.DataFrame({'Name': ['Jack', 'Mary', 'David', 'Bruce', 'Nick', 'Mark', 'Carl', 'Sofie'],
'Date of birth': ['1973', '1999', '1995', '1992/1991', '2000', '1969', '1994', '1989/1990']})
dates = ['1973', '1992', '1969', '1989']
new_df = df.loc[df['Date of birth'].isin(dates)]
print(new_df)
0 Jack 1973
1 Mary 1999
2 David 1995
3 Bruce 1992/1991
4 Nick 2000
5 Mark 1969
6 Carl 1994
7 Sofie 1989/1990
最终我得到了下表。如您所见,Bruce 和 Sofie 的行不存在,因为该值后面跟着 / 和另一个值。我应该如何将这两个分开过滤掉?
Name Date of birth
0 Jack 1973
5 Mark 1969
解决方案
您可以使用str.contains:
import pandas as pd
df = pd.DataFrame({'Name': ['Jack', 'Mary', 'David', 'Bruce', 'Nick', 'Mark', 'Carl', 'Sofie'],
'Date of birth': ['1973', '1999', '1995', '1992/1991', '2000', '1969', '1994', '1989/1990']})
dates = ['1973', '1992', '1969', '1989']
new_df = df.loc[df['Date of birth'].str.contains(rf"\b{'|'.join(dates)}\b")]
print(new_df)
输出
Name Date of birth
0 Jack 1973
3 Bruce 1992/1991
5 Mark 1969
7 Sofie 1989/1990
该字符串rf"\b{'|'.join(dates)}\b"
是一个正则表达式模式,它将匹配包含任何日期的任何字符串。
推荐阅读
- angular - 添加 NgFor 在角度 9 中破坏 Mat-line flex
- java - 如何从android studio更新firebase中的用户数据
- swiftui-navigationview - SwiftUI NavigationView 切换色调颜色
- r - 迭代除以多维指定的值 dplyr R
- sql - 在mybatis中使用查询if条件
- angular - Angular:在 CRUD 应用程序中刷新后按钮消失
- google-sheets - 请帮助修复创建每日投资组合价值的脚本,其中包含 $ 更改和 % 更改
- asp.net-core - Swagger UI 授权不发送令牌
- r - 一个绘图大小的条形图占用只有重复值的直方图?
- mongodb - 子数组中的MongoDB聚合更新字段