substring使用slice和数据帧系列作为结束

时间:2017-11-09 07:49:16

标签: python pandas dataframe slice series

我有一个数据框:

  

块引用

df  
Out[458]:

    strings
0  lui sau chun  
1  d1420152  
2  98764879333  
3  minglee    
4  g1927384  
5  hannah  

我想要做的是为字符串列中的每个值提取字符串的2/3。正如您所看到的,每个字符串的长度是不同的,因此切片的2 / 3rds位置也会不同。我的目标输出如下所示:

  

块引用

df
Out[459]:
   strings          substring
0  lui sau chun     liu sau
1  d1420152         d1420   
2  98764879333      98764879
3  minglee          ming
4  g1927384         g1927
5  annah            hann

我试过了:

x=(df['strings'].str.len()*2/3).apply(np.floor).astype(int)
df['strings'].str.slice(0,x) 

但这只是给了我以下输出:

  

块引用

Out[451]: 
0   NaN
1   NaN
2   NaN
3   NaN
4   NaN
Name: strings, dtype: float64

任何人都可以帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:1)

最好使用Series.apply计数len,然后按[]索引进行选择:

print (df['strings'].apply(lambda x: x[:int(len(x)*2/3)]))
0    lui sau 
1       d1420
2     9876487
3        ming
4       g1927
5        hann
Name: strings, dtype: object

另一种解决方案:

首先创建新列,然后apply创建axis=1以按行处理:

df['l'] =(df['strings'].str.len()*2/3).apply(np.floor).astype(int)
print (df)
        strings  l
0  lui sau chun  8
1      d1420152  5
2   98764879333  7
3       minglee  4
4      g1927384  5
5        hannah  4

print (df.apply(lambda x: x['strings'][0: x['l']], axis=1))
0    lui sau 
1       d1420
2     9876487
3        ming
4       g1927
5        hann
dtype: object