Python 在数据帧中将字符串拆分为3(三元)
我有这样一个df:Python 在数据帧中将字符串拆分为3(三元),python,pandas,Python,Pandas,我有这样一个df: col1 AAP CO. LTD. AAS dds dTdD. 我正在尝试创建一个函数,该函数生成一个类似col2的列,其中它每3(或n)个字符拆分col1: col1 col2 AAP CO. LTD. ['AAP','AP ','P C','CO.','O. '...] AAS dds dTdD. ['AAS','AS ','S d','dds','ds '...] 我尝试过这段代码,但它只是为每一行重复相同的字符串列表 def trigra
col1
AAP CO. LTD.
AAS dds dTdD.
我正在尝试创建一个函数,该函数生成一个类似col2
的列,其中它每3(或n)个字符拆分col1
:
col1 col2
AAP CO. LTD. ['AAP','AP ','P C','CO.','O. '...]
AAS dds dTdD. ['AAS','AS ','S d','dds','ds '...]
我尝试过这段代码,但它只是为每一行重复相同的字符串列表
def trigram(self):
for b in df.parent_org_name:
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
# print(a)
df.apply(trigram, axis=1)
有什么想法吗?如果您提供的
N
大于字符串长度(当前我在列表中返回原始字符串),则可以根据实际情况添加更多逻辑
string slice,将slice start和stop索引增加1,并确保在到达字符串末尾时停止,否则可能返回的子字符串。如果提供的
N
大于字符串长度,则可以根据应该发生的情况添加更多逻辑(目前我返回列表中的原始字符串)
string slice,将slice start和stop索引增加1,并确保在到达字符串末尾时停止,否则可能返回的子字符串。我认为这就是您需要的:)。如果需要使用不同于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, ...
我想这就是你需要的:)。如果需要使用不同于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, ...
不要在所有行上循环,而是按如下所示更改函数定义-
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
不要在所有行上循环,而是按如下所示更改函数定义-
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
我不再真正使用python,但不需要动态范围。像循环从i=0…(b.length-3),然后范围从i开始。。。i+3在这一行“df.parent\u org\u name中的b”中,您正在数据帧的所有行上循环,取而代之的是获取当前值并使用itI,我希望给每个人一个复选标记。非常感谢这个应用程序和这个社区。谢谢大家的帮助!我花了太长时间试图弄明白这一点。选中第一个答案——这正是我现在的工作。我不再真正使用python,但不需要动态范围。像循环从i=0…(b.length-3),然后范围从i开始。。。i+3在这一行“df.parent\u org\u name中的b”中,您正在数据帧的所有行上循环,取而代之的是获取当前值并使用itI,我希望给每个人一个复选标记。非常感谢这个应用程序和这个社区。谢谢大家的帮助!我花了太长时间试图弄明白这一点。勾选第一个答案-这正是我现在所做的。小心点,
范围
应该停在范围(0,len(x[0])-3+1)
,否则你会得到额外的。小心点,范围
应该停在范围(0,len(x[0])-3+1)
,否则你会得到额外的