2016-04-28 3 views
3

У меня есть файлы ниже формата в текстовом файле, который я пытаюсь прочитать в dataframe pandas.Точность, потерянная при использовании read_csv в pandas

895|2015-4-23|19|10000|LA|0.4677978806|0.4773469340|0.4089938425|0.8224291972|0.8652525793|0.6829942860|0.5139162227| 

Как вы можете видеть, что есть целые после плавающей запятой в файле ввода.

df = pd.read_csv('mockup.txt',header=None,delimiter='|') 

Когда я пытаюсь читать в dataframe, я не получаю последние 4 целых числа

df[5].head() 

0 0.467798 
1 0.258165 
2 0.860384 
3 0.803388 
4 0.249820 
Name: 5, dtype: float64 

Как я могу получить полную точность, как в файле ввода? У меня есть некоторые операции с матрицей, которые необходимо выполнить, поэтому я не могу использовать ее как строку.

Я понял, что должен что-то сделать с dtype, но я не уверен, где его следует использовать.

ответ

9

Это только проблема отображения см docs:

#temporaly set display precision 
with pd.option_context('display.precision', 10): 
    print df 

    0   1 2  3 4    5   6    7 \ 
0 895 2015-4-23 19 10000 LA 0.4677978806 0.477346934 0.4089938425 

      8    9   10   11 12 
0 0.8224291972 0.8652525793 0.682994286 0.5139162227 NaN  

EDIT: (Спасибо Mark Dickinson):

Панда использует специальный преобразователь десятичных в двоичном, что жертвует совершенную точность для ради скорости. Передача float_precision='round_trip' на read_csv исправляет это. Дополнительную информацию см. В разделе documentation.

+0

Спасибо. Был еще один вопрос новобранец. Есть ли вообще рекомендация для более быстрой загрузки в кадр данных при использовании read_csv(), когда данные являются в основном значениями с плавающей запятой. –

+0

Я думаю, вы можете попробовать установить 'dtypes', [см.] (Http://stackoverflow.com/q/15210962/2901002). – jezrael

+4

Возможно, стоит отметить, что это не * чисто * проблема отображения, в том смысле, что если вы используете Pandas для записи данных в CSV-файл, а затем снова читаете его, вы можете получить небольшую плавающую - точечные ошибки в результате: Pandas использует выделенный десятичный двоичный преобразователь, который жертвует идеальной точностью ради скорости. Передача 'float_precision = 'round_trip'' в' read_csv' исправляет это. Подробнее см. В [документации] (http://pandas.pydata.org/pandas-docs/stable/io.html#specifying-method-for-floating-point-conversion). –

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