0

我有一个 pandas DataFrame,在“质量”列中有 float64。我np.diff()用来查找此数据的第一个差异。

问题:如果我使用 data.mass 与 data.mass.values 相比,大小会发生变化注意,这个“错误”也可以在最小值、最大值和平均值不同的事实中看到......

import pandas as pd
import numpy as np

data = pd.DataFrame({'time': np.arange(1,101), 'mass': randn(100)})
dm = np.diff(data.mass, n=1)
dmv = np.diff(data.mass.values, n=1)

print 'data.mass: \t\t', dm.shape
print 'min: ', dm.min(), ' max: ', dm.max(), ' mean: ', dm.mean()

print ''
print 'now using data.mass.values in the calculations \n'
print 'data.mass.values: \t', dmv.shape
print 'min: ', dmv.min(), ' max: ', dmv.max(), ' mean: ', dmv.mean()

其输出为:

data.mass:      (100,)
min:  0.0  max:  0.0  mean:  0.0

now using data.mass.values in the calculations 

data.mass.values:   (99,)
min:  -3.49992599537  max:  2.52901842461  mean:  -0.00718375066572

这是预期的功能吗?为什么我需要使用.value,因为我理解 pandas DataFrames 无论如何都是 numpy 数组。

4

1 回答 1

1

根据@jeff 的评论,使用.diff()pandas DataFrame 的方法确实给出了正确的结果,如下所示:所以这显然只是numpy 方法和当前版本的pandas 之间的不良交互。(python 2.7 和 pandas 0.12.0 的 numpy 1.7.1)

import pandas as pd
import numpy as np

data = pd.DataFrame({'time': np.arange(1,101), 'mass': np.random.randn(100)})
dm = np.diff(data.mass, n=1)
dmv = np.diff(data.mass.values, n=1)

print 'data.mass: \t\t', dm.shape
print 'min: ', dm.min(), ' max: ', dm.max(), ' mean: ', dm.mean()

print ''
print 'now using data.mass.values in the calculations \n'
print 'data.mass.values: \t', dmv.shape
print 'min: ', dmv.min(), ' max: ', dmv.max(), ' mean: ', dmv.mean()

print ''
dm_p = data.mass.diff()
print 'now based on what @jeff said: '
print 'using .diff() : \t', dm_p.shape
print 'min: ', dm_p.min(), ' max: ', dm_p.max(), ' mean: ', dm_p.mean()

这输出:

data.mass:      (100,)
min:  0.0  max:  0.0  mean:  0.0

now using data.mass.values in the calculations 

data.mass.values:   (99,)
min:  -3.54980400026  max:  3.33045231942  mean:  0.0326969806441

now based on what @jeff said: 
using .diff() :     (100,)
min:  -3.54980400026  max:  3.33045231942  mean:  0.0326969806441

正如预期的那样。

于 2013-10-27T01:04:08.830 回答