【问题标题】:Pandas - Extract a string starting with a particular characterPandas - 提取以特定字符开头的字符串
【发布时间】:2020-05-11 19:09:46
【问题描述】:

它应该很简单,但我无法实现它。

我有一个数据框 df1,有一列“name_str”。示例如下:

   name_str 
0    alp:ha
1    bra:vo
2  charl:ie

我必须创建另一个包含 - 比如说 5 个字符 - 以 冒号 (:) 之后开始的列。我写了以下代码:

import pandas as pd

data = {'name_str':["alp:ha", "bra:vo", "charl:ie"]}
#indx = ["name_1",]
df1 = pd.DataFrame(data=data)
n= df1['name_str'].str.find(":")+1
df1['slize'] = df1['name_str'].str.slice(n,2)
print(df1)

但输出令人失望:NaanN

   name_str  slize
0    alp:ha    NaN
1    bra:vo    NaN
2  charl:ie    NaN

输出应该是:

   name_str  slize
0    alp:ha    ha
1    bra:vo    vo
2  charl:ie    ie

有人可以帮忙吗?欣赏它。

【问题讨论】:

    标签: python pandas dataframe find slice


    【解决方案1】:

    您可以使用str.extract 来提取冒号后的所有内容,并使用此正则表达式::(.*)

    df1['slize'] = df1.name_str.str.extract(':(.*)')                                                  
    
    >>> df1                                                                                                
       name_str slize
    0    alp:ha    ha
    1    bra:vo    vo
    2  charl:ie    ie
    

    根据您更新的问题进行修改

    如果您想在冒号后最多提取 5 个字符,则可以使用此修改:

    df['slize'] = df1.name_str.str.extract(':(.{,5})') 
    

    【讨论】:

    • 谢谢,这很有帮助。但是,我希望在冒号 (:) 之后获得固定数量的字符。我也编辑了原始问题。请检查您是否可以分享解决方案?
    • 这个似乎工作:df1['slize'] = df1['name_str'].str.extract(':(.....)
    • : 之后看到我更新的答案,以获得最多一组字符。
    • 效果很好。虽然我收到警告:正在尝试在 DataFrame 中的切片副本上设置一个值。尝试改用 .loc[row_indexer,col_indexer] = value
    • 您好,我尝试使用 ':(.*)' 提取冒号后的所有内容,但我的“之后的所有内容”是一个带有 \n 的字符串,例如“:AAA\neee\ n" 和 ':(.*)' 在第一个 \n 处停止。任何解决方案的想法?谢谢!
    猜你喜欢
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-08
    • 1970-01-01
    • 2019-03-06
    • 1970-01-01
    相关资源
    最近更新 更多