gpt4 book ai didi

python - Pandas 数据帧 : How to split one column into multiple one-hot-encoded columns

转载 作者:行者123 更新时间:2023-12-01 00:48:47 25 4
gpt4 key购买 nike

我有一个像这样的文本文件:

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?

但这仅处理一种热编码,并不能处理拆分非常大的列所增加的复杂性

最佳答案

首先创建 DataFrame 并将字符串转换为列表并调用 get_dummies :

df1 = pd.DataFrame([list(x) for x in df['genos']], index=df.index).add_prefix('g')
df2 = pd.get_dummies(df1)

如果需要将新列添加到原始列(如果可能缺少某些组合),请使用 DataFrame.reindex通过使用 _ 分割列以及 MultiIndex.from_product 创建的所有组合:

df1 = pd.DataFrame([list(x) for x in df.pop('genos')], index=df.index).add_prefix('g')
df2 = pd.get_dummies(df1)

splitted = df2.columns.str.split('_')
df2.columns = [splitted.str[0].astype(int) + 1, splitted.str[1].astype(int)]
#
mux = pd.MultiIndex.from_product([df2.columns.get_level_values(0), [0,1,2]])
df2 = df2.reindex(mux, axis=1, fill_value=0)
df2.columns = [f'g{a}_{b}' for a, b in df2.columns]
print (df2)
g1_0 g1_1 g1_2 g2_0 g2_1 g2_2 g3_0 g3_1 g3_2 g4_0 ... g32_2 \
0 0 1 0 0 1 0 0 1 0 0 ... 1

g33_0 g33_1 g33_2 g34_0 g34_1 g34_2 g35_0 g35_1 g35_2
0 1 0 0 1 0 0 0 0 1

[1 rows x 105 columns]

关于python - Pandas 数据帧 : How to split one column into multiple one-hot-encoded columns,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56733297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com