2017-05-08 67 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

相關問題