2014-10-06 59 views
0

好吧,我難住這個我已經看過熊貓文檔,但我無法弄清楚正確的方式來做到這一點,我想我只是做一個爛攤子。基本上我有數據是numpy數組,例如如何使用熊貓與多列Numpy陣列

data = numpy.loadtxt('foo.txt', dtype=str,delimiter=',') 
gps_data = numpy.concatenate((data[0:len(data),0:2],data[0:len(data),3:5]),axis=1) 
gps_time = data[0:len(data),2:3].astype(numpy.float)/1000 

GPS_DATA基本上看起來像這樣

array([['50.3482627', '-71.662499', '30', 'network'], 
     ['50.3482588', '-71.6624934', '30', 'network'], 
     ['50.34829', '-71.6625077', '30', 'network'], 
     ..., 
     ['20.3482488', '-78.66245463999999', '9', 'gps'], 
     ['20.3482598', '-78.6625174', '30', 'network'], 
     ['20.34824943', '-78.6624565', '10', 'gps']], 
     dtype='|S18') 

和gps_time

array([[ 1.16242035e+09], 
     [ 1.26242036e+09], 
     [ 1.36242038e+09], 
     ..., 
     [ 1.32330411e+09], 
     [ 1.16330413e+09], 
     [ 1.26330413e+09]]) 

我試圖做的是使用數據框帶來另一個容貌相似陣列稱爲acc_data與它相結合gps_data,然後返回並填寫不同的缺失數據時間。例如。這就是我一直在試圖

df1 = DataFrame(gps_data,index=gps_time,columns=['GPS'])

,它給這個錯誤

ValueError: Shape of passed values is (4, 35047), indices imply (1, 35047)

,我不知道如何處理,如果我能找到周圍的天賦,我認爲下一個步DF2但acc_data將正常工作,然後我可以做

p = Panel({'ACC': df1, 'GPS': df2})

任何幫助,將不勝感激被難倒這對最後幾個小時。

回答

3

你需要確保你在儘可能多的列名(使用columns關鍵字),因爲有你的NumPy的數組中列經過:

df1 = DataFrame(gps_data, index=gps_time, columns=['col1', 'col2', 'col3', 'col4']) 

熊貓引發錯誤,因爲你給它一個數組有四列,只有一列名稱,'GPS',你已經指定。

+0

甜蜜的感謝,雖然現在當我做p = Panel({'GPS':df1,'ACC':df2})時,它抱怨緩衝區有錯誤的預期維數1找到2。 – eWizardII 2014-10-06 18:28:07

+0

沒問題。你的'df2'是什麼?它是什麼形狀? – 2014-10-06 18:33:39

+0

DF2爲[7111排3列(對不起,我不知道該怎麼辦的意見正確格式化)但基本上DF2的樣子: XYZ 1.362420e + 09 -0.249893 4.125504 9.105667 1.362420e + 09 -2.738571 5.260941 8.285629 – eWizardII 2014-10-06 18:35:21

2

ajcr is right;通過指定正確的列數可以避免錯誤。由於gps_data具有形狀(35047,4),DataFrame有四列。所以如果你要指定列名,你需要columns=['col1', 'col2', 'col3', 'col4']

要獲得gps_data在正確的形狀,這也將是更容易使用

import numpy as np 
import pandas as pd 
data = np.genfromtxt('foo.txt', dtype=None, delimiter=',', 
        usecols=[0,1,2,3,4]) 
gps_data = data[:, [0,1,3,4]] 
gps_time = data[:, 2]/1000.0 

,然後你可以用

df1 = pd.DataFrame(gps_data, index=gps_time) 

注意事項建立數據框:

gps_time = data[0:len(data),2:3] 

使gps_time具有形狀的二維(35047,1)。如果使用

gps_time = data[0:len(data),2] 

然後gps_time將是一維的,形狀爲(35047,)。這更可能是你想要的,因爲索引(時間)似乎是一維的。


data = numpy.loadtxt('foo.txt', dtype=str,delimiter=',') 

使你的所有數字的字符串。如果您使用

np.genfromtxt('foo.txt', dtype=None,) 

dtype=None告訴genfromtxt作出關於每個列的類型的智能猜測 - 讓你的浮式都會自動將D型浮動。

+0

好吧我也試試這個 - 這可能是我剛剛跟進的另一個問題的原因,我在使用Panel時出現錯誤。 – eWizardII 2014-10-06 18:29:17