首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从熊猫DataFrame中选择包含以整数开头的字符串的行

从熊猫DataFrame中选择包含以整数开头的字符串的行
EN

Stack Overflow用户
提问于 2019-10-13 22:40:41
回答 2查看 5.5K关注 0票数 0

我创建了一个包含一个字符串列的熊猫DataFrame。我想将它的一些行复制到第二个DataFrame中:只是第一个空格之前的字符是大于或等于300个整数的行,第一个空格后面的字符是“百老汇”。在下面的示例中,只应复制第一行。

我更愿意解决这个问题,而不是简单地用直接的Python编写布尔表达式。让我们假设我想让某人相信使用熊猫而不是没有熊猫的Python的好处。非常感谢。

代码语言:javascript
复制
d = {
    "address": [
        "300 Broadway",      #Ok.
        "300 Wall Street",   #Sorry, not "Broadway".
        "100-10 Broadway",   #Sorry, "100-10" is not an integer.
        "299 Broadway",      #Sorry, 299 is less than 300.
        "Broadway"           #Sorry, no space at all.
    ]
}

df = pd.DataFrame(d)
df2 = df[what goes here?]   #Broadway addresses greater than or equal to 300
print(df2)
EN

回答 2

Stack Overflow用户

发布于 2019-10-13 22:52:53

我认为最好先清理一下数据,例如:

代码语言:javascript
复制
# prepare data
df[['number', 'street']] = df.address.str.split('\s+', n=1, expand=True)
df['number'] = pd.to_numeric(df.number, errors='coerce')

第一行将地址拆分为数字和街道,第二行将数字转换为实际整数,注意那些不是整数的值将被转换为NaN。然后你就可以:

代码语言:javascript
复制
# create mask to filter
mask = df.number.ge(300) & df.street.str.contains("Broadway")
print(df[mask])

基本上,创建一个布尔掩码,其中的数字大于或等于300,街道是百老汇。综合起来,你有:

代码语言:javascript
复制
# prepare data
df[['number', 'street']] = df.address.str.split('\s+', n=1, expand=True)
df['number'] = pd.to_numeric(df.number, errors='coerce')

# create mask to filter
mask = df.number.eq(300) & df.street.str.contains("Broadway")
print(df[mask])

输出

代码语言:javascript
复制
        address  number    street
0  300 Broadway   300.0  Broadway

请注意,此解决方案假定您的数据具有模式:Number Street

票数 1
EN

Stack Overflow用户

发布于 2019-10-13 23:07:56

您可以使用str.containsstr.extractge

代码语言:javascript
复制
# rows which contain broadway
m1 = df['address'].str.contains('(?i)broadway')
# extract the numbers from the string and check if they are greater of equal to 300
m2 = df['address'].str.extract('(\d+)')[0].astype(float).ge(300)

# get all the rows which have True for both conditions
df[m1&m2]

输出

代码语言:javascript
复制
        address
0  300 Broadway
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58368319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档