python - 如何从字符串列表中导出二进制数组

标签 python list pandas numpy

这个问题最好通过一个例子来描述(就像大多数情况一样)。

我有以下示例列表:

test = ['a','a','b','b','c','b']

我想获得一个 pandas 数组的列表,其长度为输入列表的长度(在本例中为 6),其中每个数组的长度为“test”中唯一值的长度,在这种情况下为 3(“a”,“b”) ' 和 'c'),它包含零和一个 1,对应于唯一值的哪个值(这里的顺序显然很重要,所以如果对唯一值进行排序,或者更好的顺序将是因为值出现在第一次,在示例中两个顺序一致)输入列表包含的每个元素。

输出将是一个数组列表,如上面的示例所示:

(1,0,0)
(1,0,0)
(0,1,0)
(0,1,0)
(0,0,1)
(0,1,0)

其他示例:

test = ['a', 'g', 'b']

(1,0,0)
(0,1,0)
(0,0,1)

如果是任意的,我还需要与输出唯一值相对应的顺序。最好是因为唯一元素是在列表中第一次遇到的。在本例中为“a”、“g”、“b”。

谢谢

最佳答案

Pandas 有一个内置函数 get_dummies,可能会满足您的目的:

>>> test = ['a','a','b','b','c','b']
>>> import pandas as pd
>>> pd.get_dummies(test)
   a  b  c
0  1  0  0
1  1  0  0
2  0  1  0
3  0  1  0
4  0  0  1
5  0  1  0

如果由于某种原因,您确实需要一个 numpy.ndarray 对象列表,您始终可以:

>>> list(pd.get_dummies(test).values)
[array([1, 0, 0], dtype=uint8), array([1, 0, 0], dtype=uint8), array([0, 1, 0], dtype=uint8), array([0, 1, 0], dtype=uint8), array([0, 0, 1], dtype=uint8), array([0, 1, 0], dtype=uint8)]
>>>

关于python - 如何从字符串列表中导出二进制数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48618935/

相关文章:

python - Pandas agg 函数根据调用定义有不同的行为

python - 将 trigrams、bigrams 和 unigrams 与文本匹配;如果 unigram 或 bigram 是已经匹配的 trigram 的子串,则通过; Python

python - 安装numpy - 系统找不到指定的文件(msvcr90.dll)

python - 如何识别 boolean 数组中的值序列?

java - 将列表映射的所有组合生成为列表列表

Python 3.x pandas 如何比较重复项并删除 csv 中具有较高值的​​行?

python - Pandas 关联表限制为 m 列 n 行

python - crontab:python 脚本正在运行但不执行操作系统命令

django - 如何在此处使用 filter() 查询集而不使用循环

json - 如何将 JSON 解码为 pandas 数据帧?