繁体   English   中英

Python Pandas使用NaN值拆分列

[英]Python pandas split column with NaN values

您好我亲爱的编码员,

我是编码新手,却偶然发现了一个问题。 我想分割通过Python在熊猫中导入的csv文件的列。 列名称为CATEGORY ,包含1、2或3个这样的值,这些值之间用逗号分隔(即:2343、3432、4959)。现在,我想将这些值拆分为名为CATEGORYSUBCATEGORYSUBSUBCATEGORY单独列。

我已经尝试了以下代码行:

products_combined[['CATEGORY','SUBCATEGORY', 'SUBSUBCATEGORY']] = products_combined.pop('CATEGORY').str.split(expand=True)

但我收到此错误: ValueError: Columns must be same length as key

很想听听您的反馈<3

你需要:

pd.DataFrame(df.CATEGORY.str.split(',').tolist(), columns=['CATEGORY','SUBCATEGORY', 'SUBSUBCATEGORY'])

输出:

    CATEGORY SUBCATEGORY SUBSUBCATEGORY
0     2343        3432           4959
1     2343        3432           4959

我认为可以通过创建三个新列并将每个列分配给应用于“ 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函数)的结果。

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM