你好,亲爱的编码员,
我是编码的新手,但偶然发现了一个问题。我想分割通过Python在熊猫中导入的csv文件的列。列名称为CATEGORY
,包含1、2或3个值,这些值之间用逗号分隔(即:2343、3432、4959)。现在,我想将这些值拆分为名为CATEGORY
,{{ 1}}和SUBCATEGORY
。
我尝试了以下代码行:
SUBSUBCATEGORY
但我收到此错误:products_combined[['CATEGORY','SUBCATEGORY', 'SUBSUBCATEGORY']] = products_combined.pop('CATEGORY').str.split(expand=True)
希望听到您的反馈<3
答案 0 :(得分:1)
您需要:
pd.DataFrame(df.CATEGORY.str.split(',').tolist(), columns=['CATEGORY','SUBCATEGORY', 'SUBSUBCATEGORY'])
输出:
CATEGORY SUBCATEGORY SUBSUBCATEGORY
0 2343 3432 4959
1 2343 3432 4959
答案 1 :(得分:0)
我认为可以通过创建三个新列并将每个列分配给应用于“ CATEGORY”列的lambda函数来实现。像这样:
products_combined['SUBCATEGORY'] = products_combined['CATEGORY'].apply(lambda original: original[1] if len(original) > 1 else None)
products_combined['SUBSUBCATEGORY'] = products_combined['CATEGORY'].apply(lambda original: original[2] if len(original) > 2 else None)
products_combined['CATEGORY'] = products_combined['CATEGORY'].apply(lambda original: original[0])
在系列上调用的apply()
方法返回一个新系列,其中包含在原始系列的每一行上运行传递的函数(在本例中为lambda函数)的结果。
答案 2 :(得分:0)
IIUC,先使用split
,然后再使用Series
:
(
df[0].apply(lambda x: pd.Series(x.split(",")))
.rename(columns={0:"CATEGORY", 1:"SUBCATEGORY", 2:"SUBSUBCATEGORY"})
)
CATEGORY SUBCATEGORY SUBSUBCATEGORY
0 2343 3432 4959
1 1 NaN NaN
2 44 55 NaN
数据:
d = [["2343,3432,4959"],["1"],["44,55"]]
df = pd.DataFrame(d)