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列出了这些字符串,这可以在fromast
模块的帮助下完成,然后您可以在数据框中分配新列:
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列出了这些字符串,这可以在fromast
模块的帮助下完成,然后您可以在数据框中分配新列:
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())