2017-05-08 27 views
2

我试图运行此代码:Python的ValueError异常:传递价值的形状是(1,627),指标暗示(3,627)

import pandas as pd 
import numpy as np 


df = pd.read_csv('example.csv', sep=';', engine='python') 
df1 =df.sort_values(['topic', 'student', 'level'], ascending=True) 

count_list = df1.apply(lambda x: [df.ix[x.name-1].student if x.name >0 else np.nan, x.student, x.level>1], axis=1).values 

#line giving the error 
df1_count = pd.DataFrame(columns=['st_source','st_dest','reply_count'], data=count_list) 

而是不断我收到此错误信息:

ValueError: Shape of passed values is (1, 627), indices imply (3, 627) 

有人知道我可以如何解决它吗?

谢谢!

+0

什么行会给你这个错误? –

+0

@ juanpa.arrivillaga df1_count = pd.DataFrame(columns = ['st_source','st_dest','reply_count'],data = count_list) – Sheron

+0

我认为这里的问题是,您修改数据帧的方式是以新列no更长的元素具有与原始数据帧相同的元素数量。 –

回答

2
count_list = df1.apply(lambda x: (df.ix[x.name-1].student,np.nan,np.nan) if x.name 0 else (np.nan, x.student, x.level>1), axis=1).values 
df2 = pd.DataFrame(count_list) 
df2[['st_source','st_dest','reply_count']] = df2[0].apply(pd.Series) 
df2 = df2.drop(0, 1) 

这将返回一个数据帧是这样的:

>>> df2 
    st_source st_dest reply_count 
0 -0.689652  NaN   NaN 
1 0.696232  NaN   NaN 
2 0.767232  NaN   NaN 
3  NaN 0.696232  False 
4 1.024604  NaN   NaN 
5 1.121045  NaN   NaN 

有可能是一个更好的,更有效的方式来做到这一点,但是这解决了问题。请注意,我已使您的if语句返回长度为3的元组,无论它遇到哪种情况。

+0

谢谢! @ViniciusAguiar – Sheron

相关问题