我有以下 df :

df = pd.DataFrame({'Category': ['root:catA', 'root:catA:catB'], 'Age':[32, 34]})

现在我想通过 Category 将列 : 拆分为总共 4 个列。由于 row0 有较少的列,因此会产生 4 个填充列,row1 中有 5 个填充列,其余的列应填充 NaN

预期输出:
df = pd.DataFrame({'Category': ['root:catA', 'root:catA:catB'], 'Age':[32, 34], 'Cat1':['root', 'root'], 'Cat2':['catA', 'catA'], 'Cat3':['NaN', 'CatB'], 'Cat4':['NaN', 'NaN']})


我尝试了以下方法:
df[['cat1','cat2', "cat3", "cat4"]] = df.Category.str.split(":",expand=True)


但我得到了一个ValueError: Columns must be same length as key

最佳答案

差不多了,您只需要一个额外的重新索引步骤:

df['Category'].str.split(':', expand=True).reindex(range(4), axis=1)

      0     1     2   3
0  root  catA  None NaN
1  root  catA  catB NaN

现在,分配将起作用。

或者,将它们 join 在一起。
(df['Category'].str.split(':', expand=True)
               .reindex(range(4), axis=1)
               .rename(lambda x: f'cat{x+1}', axis=1)
               .join(df))

   cat1  cat2  cat3  cat4        Category  Age
0  root  catA  None   NaN       root:catA   32
1  root  catA  catB   NaN  root:catA:catB   34

关于python - Pandas:将单元格拆分为多列,写入 NaN,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56445682/

10-11 17:49