首页 > 解决方案 > pandas - 单列到多列(获取密钥长度错误)

问题描述

我在使用熊猫的单列到多列的思考过程中遇到了麻烦。我有一个主列,最多可以有十个用逗号分隔的单词。我只有八列可以将这些单词拆分为(不再)。

我目前正在使用下面的代码将单词分成多列。只要我确切知道最长的单元格中有多少个单词,此代码就可以工作。示例:在下面的这种情况下,原始文件中的一个单元格将恰好包含八个单词,以便使其正常工作。否则,我会得到一个错误( Columns must be the same length as key )。在测试中,我发现我必须具有相同数量的列来拆分具有相同字数的最长单元格。不多也不少。

df[['column1','column2','column3','column4','column5','column6','column7','column8']] = 
df['main'].str.split(',',expand=True)

我希望看到的是一种不用担心主列单元格中有多少单词的方法。如果最长的单元格包含 6 个单词,则将它们分成 6 列。如果最长的单元格包含 8 个单词,则将它们分成 8 列。如果最长的单元格包含 10 个单词,则删除最后两个单词并使用 8 列拆分其余单词。

关于原文件主栏。我不知道每个单元格中存在多少个单词。我只有 8 列,所以前八列(如果有的话)有幸分成一列。其余的单词(如果有的话)将被删除。

问题,如果我的最长单元格不超过我的列,为什么我需要在上面的代码中有确切数量的列?我不明白的东西。

任何有关逻辑的帮助将不胜感激。

cols = df[['column1','column2','column3','column4','column5','column6','column7','column8']]
df2 = df['main'].str.split(',',expand=True, n=8) 
#df = df.assign(**df2.set_axis(cols[:df2.shape[1]], axis=1))

#-------
if 0 in df2.columns:
   df['column1']= np.where(df2[0].isnull(), df['column1'], df2[0])

标签: pythonpandas

解决方案


您可以使用n=8然后拆分最后一列

df2 = df['main'].str.split(',', expand=True, n=8)
df = df.assign(**df2.set_axis(df.columns[:df2.shape[1]], axis=1))


df['column8'] = df['column8'].str.split(',').str[0]

如果您不想将结果保存在 df 的第一个 df2.shape[1] 列中,则可以使用标签列表而不是 df.columns


推荐阅读