【发布时间】:2019-11-06 01:37:03
【问题描述】:
我有一个这样的文本文件:
444537110 3 11112111022002200022022111121222002...
输入文件中的最终字段长度为 50k 个字符,并且只有 0,1 或 2。我想要这个最终字段的一个热编码版本。所以我的预期结果是这样的数据框:
id chip g1_0 g1_1 g1_2 g2_0 g2_1 g2_2 g3_0 g3_1 g3_2 g4_0 ...
444537110 3 0 1 0 0 1 0 0 1 0 0
我通过读取输入文件创建了一个初始数据框:
df = pd.read_csv('test.txt', index_col=0, sep='\s+', header=None, names = ['chip', 'genos'])
这将创建一个包含 3 列的数据框:
id chip genos
444537110 3 1111211102200220000022022111121222000200022002...
我认为我可以使用类似下面的方法创建初始的单个列,然后使用 pandas get_dummies 函数进行一个热编码,但我无法创建单个列。我试过了
[c for c in df['genos'].str]
但这并没有分隔字符
我在这里看过一个类似的问题和答案:How can I one hot encode in Python?
但这仅处理一种热编码,不处理拆分非常大的列所增加的复杂性
【问题讨论】:
-
猜你可能需要
df['genos'].str.get_dummies(),但不确定提供的数据 -
刚刚尝试了这个建议,但没有奏效。它返回一个数据框,其中有一列以 genos 作为列标题,只有一个值
-
@daragh 你能假装你的最后一列只有 3 个字符而不是 50k,然后发布一些多行样本输入和完整的所需 OHE 输出吗?这将使您的意图更加清晰。因为就目前而言,听起来您想要 OHE 一个字段,该字段可能包含 3 到 50k 个不同值的幂,这似乎是个坏主意(即 waaaaay 列太多而无用)
-
@Dan 我将生成的数据帧提供给神经网络,所以我确实希望有 150k 列
标签: python python-3.x pandas dataframe one-hot-encoding