我有一个pandas系列元素,如下所示:
test output: 1 10011 Name: working_days, dtype: object
我想把每个数字作为一个元素存储在一个列表中,如下所示:
result output: [1,0,0,1,1]
你能帮助我进行转换,而不会得到这样的结果吗:
[10011]
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
m528fe3b2#
更简单的是:
import pandas as pd s = pd.Series(['10011'], name='working_days') s.apply(lambda x: list(str(x)))
首先将数字转换为字符串,然后使用该字符串创建一个列表,该列表将字符串拆分为单个字符
mqxuamgl3#
您可以对序列应用一个函数,该函数将拆分数字并将其放入列表中:
test.apply(lambda x: list(map(int, str(x))))
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
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]]
5条答案
按热度按时间des4xlb01#
假设你有字符串(你的dtype是object),你可以用途:
或者,如果你只有数字(来自@AbdulNiyasPM的建议):
输出:
m528fe3b2#
更简单的是:
首先将数字转换为字符串,然后使用该字符串创建一个列表,该列表将字符串拆分为单个字符
mqxuamgl3#
您可以对序列应用一个函数,该函数将拆分数字并将其放入列表中:
of1yzvn44#
你可以使用numpy view:
但是,如果您的系列中只有一个元素,则可以简单地执行以下操作:
如果您想将此列表分解为5列(工作日),请选择:
输出:
uhry853o5#
另一种可能的解决方案:
或者,
输出: