我有一个这样的数据框:
Blockquote
df
Out[458]:
strings
0 lui sau chun
1 d1420152
2 98764879333
3 minglee
4 g1927384
5 hannah
我想要做的是为字符串列中的每个值提取 2/3 的字符串。正如您所看到的,每个字符串的长度不同,因此要切片的 2/3 位置也会不同。我的目标输出如下所示:
Blockquote
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)
但这只是给了我以下输出:
Blockquote
Out[451]:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
Name: strings, dtype: float64
有人可以帮忙吗?
谢谢
最佳答案
更好的是使用Series.apply
使用 count len
s 并通过 []
索引进行选择:
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
<小时/>
另一个解决方案:
首先创建新列,然后使用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
关于python - 使用切片和数据帧系列作为结尾的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47196544/