如何从DataFrame的逗号分隔字符串列生成布尔列?
问题描述
我有一个类型为string的column1列,取值格式示例为"some1,some2,some3"。需要基于column1创建some1、some2、some3三个布尔列。
初始DataFrame示例:
column1 | -------------------+ "some1,some2,some3"| "some2,some3" | "some1" | "some1,some3" |
转换后目标DataFrame:
some1 | some2 | some3 | ------+-------+-------+ True | True | True | False | True | True | True | False | False | True | False | True |
解决方案
方法一:使用str.get_dummies快速生成
利用Pandas的字符串处理方法,先去除字符串两端的引号,再按逗号分割生成哑变量,最后转换为布尔类型:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'column1': ['"some1,some2,some3"', '"some2,some3"', '"some1"', '"some1,some3"'] }) # 处理字符串并生成布尔列 bool_columns = df['column1'].str.strip('"').str.get_dummies(sep=',').astype(bool) # 合并原数据与新生成的布尔列 result = pd.concat([df, bool_columns], axis=1)
方法二:遍历列名用str.contains判断
如果目标列名明确,可直接遍历列名,通过字符串包含判断生成布尔列:
import pandas as pd df = pd.DataFrame({ 'column1': ['"some1,some2,some3"', '"some2,some3"', '"some1"', '"some1,some3"'] }) target_cols = ['some1', 'some2', 'some3'] for col in target_cols: df[col] = df['column1'].str.contains(col)
两种方法都能得到符合要求的结果,方法一适合列名数量较多的场景,方法二更直观易懂。
内容的提问来源于stack exchange,提问作者Vladislav Butko
相关产品推荐
相关产品推荐

