Python 3.x 由于长度不相等,将类型为[';a';,';b';]的数组的列拆分为多列失败

Python 3.x 由于长度不相等,将类型为[';a';,';b';]的数组的列拆分为多列失败,python-3.x,pandas,Python 3.x,Pandas,我有一个问题,我似乎无法纠正。我不知道是不是因为我误解了列表和数组。我有一个数据框,由以下形式的数据组成: index artists Title language \ 0 0 Carl Woitschach ['de', 'german'] 1 1 Robert Schumann,Vladimir Horowitz ['it', 'ita

我有一个问题,我似乎无法纠正。我不知道是不是因为我误解了列表和数组。我有一个数据框,由以下形式的数据组成:

  index                              artists      Title language  \
0      0                      Carl Woitschach    ['de', 'german']   
1      1    Robert Schumann,Vladimir Horowitz   ['it', 'italian']   
2      2                  Seweryn Goszczyński    ['pl', 'polish']   
3      3                     Francisco Canaro  ['gl', 'galician']   
4      4    Frédéric Chopin,Vladimir Horowitz    ['fr', 'french']   
5      5  Felix Mendelssohn,Vladimir Horowitz   ['it', 'italian']   
6      6        Franz Liszt,Vladimir Horowitz    ['fr', 'french']   
7      7                      Carl Woitschach   ['it', 'italian']   
8      8              Francisco Canaro,Charlo   ['es', 'spanish']   
9      9                  Seweryn Goszczyński    ['pl', 'polish']   

  Artist name language  
0     ['de', 'german']  
1    ['en', 'english']  
2     ['pl', 'polish']  
3    ['es', 'spanish']  
4    ['en', 'english']  
5    ['en', 'english']  
6    ['en', 'english']  
7     ['de', 'german']  
8    ['es', 'spanish']  
9     ['pl', 'polish']  
在哪里

如您所见,列表的长度都相同。现在,我想做的是将
Artist name language
Title language
列分成四列,两列包含每个列表中的简短语言名称,最后两列包含完整的语言名称

因此,正如我之前所学到的:

df[['Artist name language ISO','Artist name language FULL']] = pd.DataFrame(df['Artist name language'].tolist(), index= df.index)
但由于这个错误,它惨败了

ValueError: Columns must be same length as key
但这并没有任何意义,因为正如我在上面发布的那样,既没有
nan
值,也没有任何列表不是
['a','b']
格式。唯一有点不同的是
['zh-CN',中文(简体)]
,但我不相信这会是原因

我甚至试过:

df1=pd.DataFrame(list(df['Artist Name language']),columns=['Artist Name language ISO','Artist Name language FULL'])

pd.concat([df,df1],axis=1)
但我得到了一个错误:

ValueError: Shape of passed values is (169886, 1), indices imply (169886, 2)
我对这种方法理解有误吗?如果有任何帮助,我们将不胜感激。

尝试以下方法:

df1=pd.DataFrame(list(df['Title language']),columns=['Title ISO','Title language Full'])

df2=pd.DataFrame(list(df['Artist Name language']),columns=['Artist Name language ISO','Artist Name language FULL'])



pd.concat([df,df1,df2],axis=1)
试试这个:

df1=pd.DataFrame(list(df['Title language']),columns=['Title ISO','Title language Full'])

df2=pd.DataFrame(list(df['Artist Name language']),columns=['Artist Name language ISO','Artist Name language FULL'])



pd.concat([df,df1,df2],axis=1)

首先,您需要
评估
艺术家名称语言
标题语言
中的字符串,因为python列出了这些字符串,这可以在from
ast
模块的帮助下完成,然后您可以在数据框中分配新列:

from ast import literal_eval

c = ['Artist name language ISO','Artist name language FULL']
df[c] = df['Artist name language'].map(literal_eval).tolist()


首先,您需要
评估
艺术家名称语言
标题语言
中的字符串,因为python列出了这些字符串,这可以在from
ast
模块的帮助下完成,然后您可以在数据框中分配新列:

from ast import literal_eval

c = ['Artist name language ISO','Artist name language FULL']
df[c] = df['Artist name language'].map(literal_eval).tolist()


我真的试过并得到了错误:
ValueError:passed value的形状是(169886,1),indeximple(169886,2)
(['Artister name language ISO','Artister name language FULL'],dtype='object')]在[columns]“
@Sergedegossondevarenes我猜您使用的是旧的pandas版本..请检查
df[c]=pd.DataFrame(df['Artister name language'].map(literal_eval).tolist())
整洁,但对我来说它失败
KeyError:“没有[Index](['Artister name language ISO'、'Artister name language FULL'、dtype='object')]在[columns]“
@Sergedegossondevarenes我猜您使用的是旧的pandas版本..检查
df[c]=pd.DataFrame(df['Artister name language'].map(literal_eval).tolist())