Python Pandas使用NaN值拆分列

时间:2018-07-27 14:27:11

标签: python pandas

你好,亲爱的编码员,

我是编码的新手,但偶然发现了一个问题。我想分割通过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

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)