我有一个数据框:
块引用
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
任何人都可以帮忙吗?
谢谢
答案 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