首页 > 解决方案 > 如何将多个值填充到熊猫数据框中的一列中?(不使用字符串)Python

问题描述

到目前为止,我设法通过使用字符串并稍后将其拆分来做到这一点。

print(df)

       a    b    c   z
0      0    0    0   "23,8,100"
1      1    1    1   "23,2,100"
2      2    2    2    "1,8,100"
3      3    3    3   "23,5,300"
4      4    4    4     "23,8,7"

# converting column to list
x_list = df["z"].tolist()

# splitting via list comprehension
[[float(x) for x in xstring.split(",")]  for xstring  in  xlist]

但是我想知道是否有一种更快的方法可以将一个小列表[23,8,100] 放入一列并在调用数据帧中的索引时接收一个列表。(甚至更好:将整个列称为列表列表)

(列表中的元素数量取决于静态输入,所以当我有 3 个元素时,它总是 3 个列表,但我也可以输入 100,因此每个列表中的元素数量为 100。)

标签: pythonarrayspandaslistmultiple-columns

解决方案


IIUC 您想将字符串转换为列表
首先,使用删除多余的"引号,strip然后将字符串拆分为列表

df.z.str.strip('"').str.split(',')
0    [23, 8, 100]
1    [23, 2, 100]
2     [1, 8, 100]
3    [23, 5, 300]
4      [23, 8, 7]
Name: z, dtype: object

并用于map将字符串转换为floatwithapply

df.z.str.strip('"').str.split(',').apply(lambda x:list(map(float,x)))
0    [23.0, 8.0, 100.0]
1    [23.0, 2.0, 100.0]
2     [1.0, 8.0, 100.0]
3    [23.0, 5.0, 300.0]
4      [23.0, 8.0, 7.0]
Name: z, dtype: object

或者你可以分配回来

df.z = df.z.str.strip('"').str.split(',').apply(lambda x:list(map(float,x)))

推荐阅读