2014-10-20 2 views
1

Я изучаю переписывание кода анализа данных с помощью Pandas (так как я только что открыл его) на Ubuntu 14.04 64-bit, и я столкнулся с каким-то странным поведением. Мои файлы данных выглядят так:Python Pandas Scientific Notation Iconsistent

26/09/2014 00:00:00 2.423009 -58.864655 3.312355E-7 6.257226E-8 302 305 
26/09/2014 00:00:00 2.395637 -62.73302 3.321525E-7 7.065322E-8 302 305 
26/09/2014 00:00:01 2.332541 -57.763269 3.285718E-7 6.873837E-8 302 305 
26/09/2014 00:00:02 2.366828 -51.900812 3.262279E-7 7.397762E-8 302 305 
26/09/2014 00:00:03 2.435500 -40.820161 3.241068E-7 6.777224E-8 302 305 
26/09/2014 00:00:04 2.428922 -65.573049 3.212358E-7 6.761804E-8 302 305 
26/09/2014 00:00:05 2.419931 -59.414711 3.185517E-7 7.243236E-8 302 305 
26/09/2014 00:00:06 2.416663 -60.064279 3.209795E-7 6.242328E-8 302 305 
26/09/2014 00:00:07 2.411954 -52.586242 3.184297E-7 5.825581E-8 302 304 
26/09/2014 00:00:08 2.457342 -61.874388 3.151493E-7 6.327384E-8 303 304 

Где столбцы разделены табуляцией. Для того, чтобы читать их в панд, я использую следующие простые команды:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

data = pd.read_csv("path/to/file.dat", sep="\t", header=None) 
print data 

Это производит следующий вывод:

  0   1   2   3 4    5 6 7 
0 26/09/2014 00:00:00 2.423009 -58.864655 0 6.257226e-08 302 305 
1 26/09/2014 00:00:00 2.395637 -62.733020 0 7.065322e-08 302 305 
2 26/09/2014 00:00:01 2.332541 -57.763269 0 6.873837e-08 302 305 
3 26/09/2014 00:00:02 2.366828 -51.900812 0 7.397762e-08 302 305 
4 26/09/2014 00:00:03 2.435500 -40.820161 0 6.777224e-08 302 305 
5 26/09/2014 00:00:04 2.428922 -65.573049 0 6.761804e-08 302 305 
6 26/09/2014 00:00:05 2.419931 -59.414711 0 7.243236e-08 302 305 
7 26/09/2014 00:00:06 2.416663 -60.064279 0 6.242328e-08 302 305 
8 26/09/2014 00:00:07 2.411954 -52.586242 0 5.825581e-08 302 304 
9 26/09/2014 00:00:08 2.457342 -61.874388 0 6.327384e-08 303 304 

[10 rows x 8 columns] 

Важно заметить здесь столбец 4. Сравнить его колонке 5 и исходным данным. Столбец 5 представлен в научной нотации, а в столбце 4 нет. Он не просто обнулял колонку или преобразовал ее в int, потому что:

>>> data[4][0]*1e7 
3.3123550000000002 

Это то, чего я ожидал бы. Таким образом, значения данных совпадают, но представление изменилось. Если это всего лишь косметическая штука, то я могу смириться с этим, но это заставляет меня чувствовать себя неловко, и я хотел бы знать, что здесь происходит.

ответ

4

Да это косметическая вещь, вы можете изменить это с помощью set_option:

In [21]: 

pd.set_option('display.precision',20) 
df[4] 
Out[21]: 
0 0.0000003312355 
1 0.0000003321525 
2 0.0000003285718 
3 0.0000003262279 
4 0.0000003241068 
5 0.0000003212358 
6 0.0000003185517 
7 0.0000003209795 
8 0.0000003184297 
9 0.0000003151493 
Name: 4, dtype: float64 

Основополагающие данные не будут усечены и будут сохранены в том числе при записи данных обратно в CSV

Если вы находитесь в iPython, вы можете проверить, какие настройки по умолчанию, для точности отображения (значащие цифры) обычно 7.

+0

Хорошо, спасибо за заверение. Мне показалось странным, что столбец 5 (содержащий даже значения _smaller_) был правильно отображен, когда столбец 4 не был. Я использовал команду set_option, и это отображает числа, которые я ожидал, но теперь они не находятся в научной нотации. Предположительно, я найду настройку для этого, если буду искать. –

+0

это фактически зафиксировало проблему, с которой я столкнулся, когда панды читали экспоненциальные числа и отсекали значимые цифры – As3adTintin

Смежные вопросы