Python 使用切片和数据帧系列作为结束的子字符串
我有这样一个数据帧: 大宗报价 我想做的是为strings列中的每个值提取字符串的2/3。正如您所看到的,每个字符串的长度不同,因此要切掉的2/3rds位置也不同。我的目标输出如下所示: 大宗报价 我试过:Python 使用切片和数据帧系列作为结束的子字符串,python,pandas,dataframe,slice,series,Python,Pandas,Dataframe,Slice,Series,我有这样一个数据帧: 大宗报价 我想做的是为strings列中的每个值提取字符串的2/3。正如您所看到的,每个字符串的长度不同,因此要切掉的2/3rds位置也不同。我的目标输出如下所示: 大宗报价 我试过: x=(df['strings'].str.len()*2/3).apply(np.floor).astype(int) df['strings'].str.slice(0,x) 但这只是给了我以下输出: 大宗报价 有人能帮忙吗 谢谢更好的方法是使用countlens,并通过索引选择[]:
x=(df['strings'].str.len()*2/3).apply(np.floor).astype(int)
df['strings'].str.slice(0,x)
但这只是给了我以下输出:
大宗报价
有人能帮忙吗
谢谢更好的方法是使用countlen
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
另一个解决方案: 首先创建新列,然后对“按行处理”应用轴=1的
apply
:
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
如果我的答案有用,别忘了-点击复选标记(
✓答案旁边的代码>),将其从灰显切换为填充。谢谢
Out[451]:
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
Name: strings, dtype: float64
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
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