Pandas: 将单列内的列表转换为多列
Pandas: Convert lists within a single column to multiple columns
我有一个数据框,其中包含多个属性以逗号分隔的列:
df = pd.DataFrame({'id': [1,2,3], 'labels' : ["a,b,c", "c,a", "d,a,b"]})
id labels
0 1 a,b,c
1 2 c,a
2 3 d,a,b
(我知道这不是一个理想的情况,但数据来源于外部来源。)我想把多属性列变成多列,每个标签一个,这样我就可以处理它们作为分类变量。期望的输出:
id a b c d
0 1 True True True False
1 2 True False True False
2 3 True True False True
我可以很容易地获得所有可能属性的集合 ([a,b,c,d]
),但是无法找到一种方法来确定给定行是否具有特定属性,而无需对每个属性进行逐行迭代.有更好的方法吗?
您可以使用 get_dummies
, cast 1
and 0
to boolean
by astype
and last concat
列 id
:
print df['labels'].str.get_dummies(sep=',').astype(bool)
a b c d
0 True True True False
1 True False True False
2 True True False True
print pd.concat([df.id, df['labels'].str.get_dummies(sep=',').astype(bool)], axis=1)
id a b c d
0 1 True True True False
1 2 True False True False
2 3 True True False True
我有一个数据框,其中包含多个属性以逗号分隔的列:
df = pd.DataFrame({'id': [1,2,3], 'labels' : ["a,b,c", "c,a", "d,a,b"]})
id labels
0 1 a,b,c
1 2 c,a
2 3 d,a,b
(我知道这不是一个理想的情况,但数据来源于外部来源。)我想把多属性列变成多列,每个标签一个,这样我就可以处理它们作为分类变量。期望的输出:
id a b c d
0 1 True True True False
1 2 True False True False
2 3 True True False True
我可以很容易地获得所有可能属性的集合 ([a,b,c,d]
),但是无法找到一种方法来确定给定行是否具有特定属性,而无需对每个属性进行逐行迭代.有更好的方法吗?
您可以使用 get_dummies
, cast 1
and 0
to boolean
by astype
and last concat
列 id
:
print df['labels'].str.get_dummies(sep=',').astype(bool)
a b c d
0 True True True False
1 True False True False
2 True True False True
print pd.concat([df.id, df['labels'].str.get_dummies(sep=',').astype(bool)], axis=1)
id a b c d
0 1 True True True False
1 2 True False True False
2 3 True True False True