熊猫中的子字符串元素

时间:2018-07-27 04:59:57

标签: python pandas

对于python DataFrame,我需要为列中的每个元素选择特定字符

df['y'] = df['x'].apply(lambda x: x[1:4])

但收到此错误

TypeError:“ NoneType”对象不可下标

2 个答案:

答案 0 :(得分:1)

我认为也需要indexing with str来处理NaNNone的问题:

df = pd.DataFrame({ 'x' : ['abcdef','av', 'a', None, np.nan]})
df['y'] = df['x'].str[1:4]
print (df)

        x     y
0  abcdef   bcd
1      av     v
2       a      
3    None  None
4     NaN   NaN

编辑:

我建议先用str[1:]进行索引,然后再用sparator进行索引,然后再用str[0]进行可见的先拆分列表:

df = pd.DataFrame({ 'x' : ['abc|etf','av|ee', 'ayty|s', None, np.nan]})

df['y'] = df['x'].str[1:].str.split('|').str[0]
print (df)

         x     y
0  abc|etf    bc
1    av|ee     v
2   ayty|s   yty
3     None  None
4      NaN   NaN

编辑:

df = pd.DataFrame({ 'x' : ['abc|Ttf','av|Re', 'ayty|s','ayty|','ayty', None, np.nan]})

def f(x):
    #find position
    pos = x.find('|')
    #if no match return same value
    if pos == -1:
        return x
    #else procees code - split
    else:
        return x[:pos+2]

mask = df['x'].notnull()
df.loc[mask, 'y'] = df.loc[mask, 'x'].apply(f)
print (df)

         x       y
0  abc|Ttf   abc|T
1    av|Re    av|R
2   ayty|s  ayty|s
3    ayty|   ayty|
4     ayty    ayty
5     None     NaN
6      NaN     NaN

答案 1 :(得分:0)

也可以使用str.slice

>>> df.x.str.slice(1,4)

例如

df.x

0    abcdef
1    abcdef
2    abcdef
3      None
4    abcdef

df.a.str.slice(1,4)

0     bcd
1     bcd
2     bcd
3    None
4     bcd