我有以下命令:
df1['parent'] = df1['x'].map(lambda x: x.split('by')[1])
我得到了:
IndexError: list index out of range
对于列中的某些值,在“by”之后没有任何内容,我怎么能做类似的事情:如果之后没有任何内容,那么写“”
答案 0 :(得分:2)
将str.split
与indexing with str一起使用,如果没有值,则返回NaN
,然后添加fillna
:
df1 = pd.DataFrame({'x':['ddbytrr','df']})
print (df1)
x
0 ddbytrr
1 df
df1['parent'] = df1['x'].str.split('by').str[1].fillna('')
print (df1)
x parent
0 ddbytrr trr
1 df
map
和if-else
的解决方案,但仅当列中没有NaN
个值时才有效:
df1['parent'] = df1['x'].map(lambda x: x.split('by')[1] if len(x.split('by')) > 1 else '')
print (df1)
x parent
0 ddbytrr trr
1 df
与numpy.where
解决方案相同:
splitted = df1['x'].str.split('by')
df1['parent'] = np.where(splitted.str.len() > 1, splitted.str[1], '')
print (df1)
x parent
0 ddbytrr trr
1 df