好的,我很难过。我查看了Pandas
文档,但我无法找到正确的方法,我认为我只是弄得一团糟。基本上,我的数据是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]])
我要做的是使用DataFrame
带来另一个名为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})
任何帮助都会非常感激,因为我最近几个小时都对此感到难过。
答案 0 :(得分:3)
您需要确保传入尽可能多的列名(使用columns
关键字),因为NumPy数组中有列:
df1 = DataFrame(gps_data, index=gps_time, columns=['col1', 'col2', 'col3', 'col4'])
Pandas会引发错误,因为您已经为它提供了一个包含四列的数组,而且它只有一个列名'GPS'
,您已经指定了它。
答案 1 :(得分: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
然后您可以使用
构建DataFramedf1 = 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
将是1维的,具有形状(35047,)。这很可能是你想要的,因为索引(时间)似乎是1维的。
data = numpy.loadtxt('foo.txt', dtype=str,delimiter=',')
制作所有数字字符串。如果你使用
np.genfromtxt('foo.txt', dtype=None, )
dtype=None
告诉genfromtxt
对每列的类型进行智能猜测 - 因此类似浮点数的数字将自动具有dtype float。