Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在数据帧中将字符串拆分为3(三元)_Python_Pandas - Fatal编程技术网

Python 在数据帧中将字符串拆分为3(三元)

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

我有这样一个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 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)
,否则你会得到额外的