我只想保留单词'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
答案 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]