我在pandas
(v。0.18.0)似乎在DataFrame
的values
屬性上執行某些「幕後」轉換時遇到了一些困難。 我有一個數據集,看起來像下面這樣:熊貓DataFrame.values轉換錯誤或功能?
data = [(1473897600000000, 9.9166, 1.8621, 15),
(1473897660000000, 19.9166, 3.8621, 20),
(1473897720000000, 29.9166, 5.8621, 25),
(1473897780000000, 39.9166, 7.8621, 30)]
每個元組的第一個元素代表了微秒的POSIX UTC時間戳。
dtype = [('timestamp', np.dtype('int64')),
('a', np.dtype('float32')),
('b', np.dtype('float32')),
('c', np.dtype('uint8'))]
我如用下面的代碼轉換這對一個DataFrame
:每個元件的(name, dtype)
由以下記錄陣列給出
data_array = np.array(data, dtype=dtype)
df = pd.DataFrame.from_records(data_array)
但是,下面的代碼給出一些奇怪的結果(至少對我來說):
ts_orig = np.array([x[0] for x in data], dtype=float)
ts_column = df['timestamp'].values.astype(float)
ts_values = df.values[:, 0]
ts_diff = ts_values - ts_column
print(np.column_stack((ts_orig, ts_column, ts_values, ts_diff)))
# OUTPUT
# ts_orig ts_column ts_values ts_diff
[[ 1.47389760e+15 1.47389760e+15 1.47389762e+15 1.87351040e+07]
[ 1.47389766e+15 1.47389766e+15 1.47389762e+15 -4.12648960e+07]
[ 1.47389772e+15 1.47389772e+15 1.47389775e+15 3.29528320e+07]
[ 1.47389778e+15 1.47389778e+15 1.47389775e+15 -2.70471680e+07]]
看起來很清楚,將時間戳值轉換爲相同的浮點值val沒有問題直接(第1和2列)。準確的值仍然保留在DataFrame
中,但是當整個DataFrame
通過DataFrame.values
屬性(第3列)轉換爲數組時,碰巧會擾亂時間戳值並將它們瘋狂拋出。
爲什麼會發生這種情況,我該如何預防它?
在提取numpy數組之前轉換爲'float64':'df.astype(np.float64).values [:,0]' –