3 回答

TA貢獻1828條經驗 獲得超3個贊
您可以添加更多邏輯,具體取決于如果您提供的N大于字符串長度的情況會發生什么(目前我在列表中返回原始字符串)。
字符串切片,將切片開始和停止索引增加 1,并確保到達字符串末尾后停止,否則可能會返回長度 <N 的子字符串。
import numpy as np
def split_str(s, N):
rmax = np.clip(len(s)-N, a_min=0, a_max=None)+1
return [s[0+i:N+i] for i in range(0, rmax)]
df['col1'].apply(lambda x: split_str(x, 3))
#0 [AAP, AP , P C, CO, CO., O. , . L, LT, LTD, ...
#1 [AAS, AS , S d, dd, dds, ds , s d, dT, dTd, ...
#Name: col1, dtype: object
# To show actual values
df['col1'].apply(lambda x: split_str(x, 3))[0]
#['AAP', 'AP ', 'P C', ' CO', 'CO.', 'O. ', '. L', ' LT', 'LTD', 'TD.']

TA貢獻1851條經驗 獲得超4個贊
我想這就是你所需要的:)。如果需要使用不同于 3 的參數 n 來運行它,那么他們可以相應地更改括號中的 i+3
df["col2"] = df.apply(lambda x: [x[0][i:i+3] for i in range(0, len(x[0]))],axis=1)
#The result looks as follows
col1 col2
0 AAP CO. LTD. [AAP, AP , P C, CO, CO., O. , . L, LT, LTD, ...
1 AAS dds dTdD. [AAS, AS , S d, dd, dds, ds , s d, dT, dTd, ...

TA貢獻1864條經驗 獲得超2個贊
不要循環遍歷所有行,而是更改函數定義,如下所示 -
def trigram(self):
b=self.col1
a = ["".join(j) for j in zip(*[b[i:] for i in range(3)])]
# a = ["".join(j) for j in zip(*[b[i:] for i in range(3)])]
# [b[i:i+3] for i in range(len(b)-1)]
return a
添加回答
舉報