Python 将pandas.DataFrame列的字符串值拆分为数组

Python 将pandas.DataFrame列的字符串值拆分为数组,python,string,pandas,types,split,Python,String,Pandas,Types,Split,我从postgresql执行了一些sql请求,并将其设置为pandas.DataFrame()。 每行看起来都像:“8B1LP1D”,其中字母('B','LP'等)是分隔符 这是一篇文章: #formula is a pd.DataFrame with 1 column for x in formula: print(re.split('B|LP|D|E|OS|DN',x)) 输出看起来很好,如下所示: ['8', '1', '1'] ... ['5', '3', '2'] #etc

我从postgresql执行了一些sql请求,并将其设置为pandas.DataFrame()。 每行看起来都像:“8B1LP1D”,其中字母('B','LP'等)是分隔符 这是一篇文章:

#formula is a pd.DataFrame with 1 column
for x in formula:
    print(re.split('B|LP|D|E|OS|DN',x))
输出看起来很好,如下所示:

['8', '1', '1']
...
['5', '3', '2']
#etc
但我必须在数组中附加它:

def move_parts(a):
    split = []
    for x in a:
        split.append(re.split('B|LP|D|E|OS|DN',x))
move_parts(formula)
返回的结果与错误类似:

/usr/lib/python3.7/re.py in split(pattern, string, maxsplit, flags)
    211     and the remainder of the string is returned as the final element
    212     of the list."""
--> 213     return _compile(pattern, flags).split(string, maxsplit)
    214 
    215 def findall(pattern, string, flags=0):

TypeError: expected string or bytes-like object


有什么问题,如何将所有拆分的值保存到数组

如果
formula
是一个
pd.DataFrame
,如您所说有一列,则您的第一个表达式会给出相同的错误。使用熊猫代替:

输出:

[['8', '1', '1'], ['5', '3', '2']]

PS:您应该对分隔符重新排序(如我的示例中所示):较长的“DN”必须位于单个“D”之前,否则它将永远不会匹配。

此处的错误不是由于添加到列表中,而是由于重新拆分的值。我能够重新生成错误的唯一方法是当公式的类型=pandas.DataFrame时。当我将公式设置为平面列表或pandas.Series时,一切正常。在您的代码中,第一个实例公式是否可能是一个列表(或pandas.Series),然后更改为pandas.DataFrame?它可以很简单,只要引用pandas.DataFrame中希望它运行的实际列名即可。假设它被称为“请求结果”,然后我们将代码更改为以下代码,它应该能够运行:

def move_parts(a):
    split = []
    for x in a:
        split.append(re.split('B|LP|D|E|OS|DN',x))
move_parts(formula['request_results'].astype(str))

注意,我还在末尾添加了.astype(str)。另一种选择是列表中的某些项不是str类型。产生的错误是,re.split()的第二个参数需要一个str(或bytes对象,但不包含在内),而得到的是其他东西,可能是None或float。

你能举例说明你想要得到什么结果吗?最好创建一个例子,我想用管道或逗号替换
B
LP
是行不通的,因为您可能会删除所需的数据。
def move_parts(a):
    split = []
    for x in a:
        split.append(re.split('B|LP|D|E|OS|DN',x))
move_parts(formula['request_results'].astype(str))