仅当出现特定单词时,才如何在列中拆分字符串?

时间:2019-05-06 12:42:05

标签: python string pandas dataframe split

我只想保留单词'in'之后的部分(如果它出现在列的一行中)。问题是,如果该单词未在行中出现,则其原始值将被NaN替换。如果没有出现“ in”一词,我想保留原始值。

我尝试使用str.split在“ city”列上拆分字符串:

    Rotterdam
    Den Haag
    Postcode 2288 in Rijswijk
    Postcode 2511 in Den Haag Centrum
    Delft
df.city.astype(str).str.split('in').str[1]

实际结果:

    NaN
    NaN
    Rijswijk
    Den Haag Centrum
    NaN

预期结果:

    Rotterdam
    Den Haag
    Rijswijk
    Den Haag Centrum
    Delft

1 个答案:

答案 0 :(得分:2)

一种可能的解决方案是用原始列替换缺少的值:

df['new'] = df.city.astype(str).str.split(' in ').str[1].fillna(df.city)
print (df)
                                city                new
0                          Rotterdam          Rotterdam
1                           Den Haag           Den Haag
2          Postcode 2288 in Rijswijk           Rijswijk
3  Postcode 2511 in Den Haag Centrum   Den Haag Centrum
4                              Delft              Delft

或通过-1选择列表中的最后一个值-如果数据中仅包含一个in,则解决方案的工作原理相同:

df.city.astype(str).str.split(' in ').str[-1]

@Jon Clements的另一个解决方案是使用Series.str.rpartition

df.city.str.rpartition(' in ')[2]