Python 将多个字符串列合并为整数列表

Python 将多个字符串列合并为整数列表,python,pandas,Python,Pandas,我有一个数据框df,就像这样,其中两列都是对象 +-----+--------------------+--------------------+ | id | col1 | col2 | +-----+--------------------+--------------------+ | 1 | 0,1,4,0,1 | 1,2,4,0,0 | +-----

我有一个数据框
df
,就像这样,其中两列都是
对象

    +-----+--------------------+--------------------+
    |  id |         col1       |         col2       |
    +-----+--------------------+--------------------+
    |   1 |  0,1,4,0,1         |  1,2,4,0,0         |
    +-----+--------------------+--------------------+
我把它们转换成这样的列表

test = df["col1"]+','+df["col2"]
test.tolist()
[0,1,4,0,1,1,2,4,0,0] 
作为列表中的单个STING元素生成以下结果

['0,1,4,0,1,1,2,4,0,0']
但是,我希望它们是这样的整数列表

test = df["col1"]+','+df["col2"]
test.tolist()
[0,1,4,0,1,1,2,4,0,0] 

有什么建议吗?仅供参考,我的原始数据集中的列非常大,因此性能可能也是一个问题

您可以使用地图作为

 test = str(df["col1"]+','+df["col2"])
 list(map(int, test.split(','))) 
我想你想要:

(df['col1'] + ',' + df['col2']).apply(lambda row: [int(s) for s in row.split(',')])
输出:

0    [0, 1, 4, 0, 1, 1, 2, 4, 0, 0]
dtype: object

另一种方法是使用
str.split
explode

arr = df.set_index('id').stack().str.split(',').explode().astype(int).values

print(arr)
array([0, 1, 4, 0, 1, 1, 2, 4, 0, 0])

您是否可以控制这些列最初是如何创建的?如果性能可能是一个问题,那么这就是需要花费精力的地方。它们来自CSV文件。在输出到其他要处理的函数时,如何将其作为纯
列表而不是对象?您的数据帧是否只有一行?问得好。我确实有多行,但作为预处理,我已经确保一次只输入一行。如果该解决方案可以处理多行,则更好:-)此解决方案为您提供一系列列表,每个列表对应一行。因此,如果您想将每个列表传递给您的函数,您可以对r系列执行循环
:您的_func(r)
,其中
series
是上面的输出。遇到此错误
AttributeError:'series'对象没有属性“explode”
@AbuShoeb您使用的熊猫是什么版本?我知道是在0.25里加的。我的是0.23。4@AbuShoeb如果您可以升级,然后执行该操作,否则您可以在str.split之后再次使用堆栈,并使用arg
expand=True
,正如我在另一个答案中提到的,是否可以将最终结果作为列表而不是映射对象?键入要列表的全部内容。更新我想我以前试过,现在又试过,结果是
ValueError:invalid literal for int(),以10为基数:“0 1”