pandas 系列到每个字符的列表中

dwbf0jvd  于 2023-06-20  发布在  其他
关注(0)|答案(5)|浏览(92)

我有一个pandas系列元素,如下所示:

test

output:
1    10011
Name: working_days, dtype: object

我想把每个数字作为一个元素存储在一个列表中,如下所示:

result 

output:
[1,0,0,1,1]

你能帮助我进行转换,而不会得到这样的结果吗:

[10011]
des4xlb0

des4xlb01#

假设你有字符串(你的dtype是object),你可以用途:

s = pd.Series(['10011'], name='working_days')

out = s.str.findall(r'\d')

或者,如果你只有数字(来自@AbdulNiyasPM的建议):

out = s.map(list)

输出:

0    [1, 0, 0, 1, 1]
Name: working_days, dtype: object
m528fe3b

m528fe3b2#

更简单的是:

import pandas as pd
s = pd.Series(['10011'], name='working_days')

s.apply(lambda x: list(str(x)))

首先将数字转换为字符串,然后使用该字符串创建一个列表,该列表将字符串拆分为单个字符

mqxuamgl

mqxuamgl3#

您可以对序列应用一个函数,该函数将拆分数字并将其放入列表中:

test.apply(lambda x: list(map(int, str(x))))
of1yzvn4

of1yzvn44#

你可以使用numpy view:

>>> test.values.astype(str)[:, None].view('<U1').astype(int).tolist()
[[1, 0, 0, 1, 1],
 [0, 0, 1, 1, 0]]

但是,如果您的系列中只有一个元素,则可以简单地执行以下操作:

>>> test.values.astype(str).view('<U1').astype(int).tolist()
[1, 0, 0, 1, 1]

如果您想将此列表分解为5列(工作日),请选择:

import pandas as pd
import numpy as np

days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
test = pd.Series(['10011', '00110'])

df = pd.DataFrame(test.values.astype(str)[:, None].view('<U1').astype(int), columns=days)

输出:

>>> test
0    10011
1    00110
dtype: object

>>> df
  Mon Tue Wed Thu Fri
0   1   0   0   1   1
1   0   0   1   1   0
uhry853o

uhry853o5#

另一种可能的解决方案:

s.astype(str).str.split(r'(?<=\d)(?=\d)', expand=True).apply(list, axis=1)

或者,

s.astype(str).str.split(r'(?<=\d)(?=\d)', expand=True).values.astype(int).tolist()

输出:

# First solution
0    [1, 0, 0, 1, 1]
dtype: object

# Second solution
[[1, 0, 0, 1, 1]]

相关问题