python - Pandas:将单元格拆分成多列,写入NaN

标签 python pandas dataframe

我有以下 df:

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

现在我想将 Category 列按 : 拆分为总共 4 列。由于第 0 行将产生 4 个填充列,第 1 行将产生 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:列的长度必须与键的长度相同

最佳答案

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

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

现在,分配将起作用。

或者,加入它们。

(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/

相关文章:

python-3.x - 尝试拆分对象数据类型的列以在数据帧中创建单独的列。收到错误 : "' float object is not subscriptable"

python - pandas 中数据框的聚合函数

python - 使用具有默认值的列将数据框复制到 postgres 表

python - Pyspark 中的宽数据帧操作太慢

python - 如何简化 Python 和 Matlab 中的 for 循环

python - 将unicode列表转换为列表字符串

python - 计算数据帧所有行之间的成对欧几里得距离

python - 如何使用 python pandas 在本地系统 Jupyter Notebook 中读取两个较大的 5GB csv 文件?如何在本地连接两个数据框进行数据分析?

Python Pylearn2 包 "ImportError: No module named pylearn2.utils"

excel - 由于数字格式为文本,将 Excel 文件读取到 Python 失败