2016-04-09 4 views
1

У меня проблема с пандами, которые у меня не было несколько месяцев назад. Я пытаюсь взять набор данных из пользовательского ввода (используя tkinter) и помещать его в рамку данных pandas. Вот как выглядят данные, как:Pandas DataFrame не умеет читать данные

1.000000 03/27/2016 13:29:26.098 1431.778943 0.092089 
1.000000 03/27/2016 13:29:26.298 1432.410517 0.078570 
1.000000 03/27/2016 13:29:26.498 1431.905258 0.089538 
1.000000 03/27/2016 13:29:26.698 1431.399999 0.080930 
5.000000 03/28/2016 00:00:00.098 1289.422164 0.392945 
25.000000 03/28/2016 00:00:00.298 1289.295849 0.145016 
25.000000 03/28/2016 00:00:00.498 1289.295849 0.183149 
25.000000 03/28/2016 00:00:00.698 1288.790590 0.175114 
26.000000 03/28/2016 00:25:16.698 1302.053644 0.162170 
..... 

В 5 колонок установлены, но, как правило, где-то между 200 000 до 800 000 строк в наборе данных.

Вот мой код:

import pandas as pd 
import tkinter as tk 
from tkinter import filedialog 

root = tk.Tk() 
root.withdraw() 
file_path = filedialog.askopenfilename() #User selects file 

file = pd.read_table(file_path, index_col=False) 
df = pd.DataFrame(data=file, columns=['Measurement', 'Date', 'Time','CO2', 'Flow'], dtype=object) 

print(file_path) 
print(file) 
print(df) 

печати (file_path) выводит правильный путь, печать (файл) показывает все правильные данные, и печать (ДФ) показывает, что это:

Measurement Date Time CO2 Flow 
0   NaN NaN NaN NaN NaN 
1   NaN NaN NaN NaN NaN 
2   NaN NaN NaN NaN NaN 
3   NaN NaN NaN NaN NaN 
4   NaN NaN NaN NaN NaN 
5   NaN NaN NaN NaN NaN 
6   NaN NaN NaN NaN NaN 
7   NaN NaN NaN NaN NaN 
8   NaN NaN NaN NaN NaN 
....... 

Раньше я делал то же самое, но я потерял сценарий, над которым работал, и ему нужно было начать все заново. Он работал отлично, но я не уверен, что произошло. Я попробовал несколько вещей, чтобы исправить это:

  1. Изменение pd.read_table в pd.io.parsers.read_table
  2. Измененный индекс =, DTYPE = и другие свойства pd.DataFrame
  3. преобразовал файл в .csv и б pd.read_csv
  4. Сокращенный файл значительно
  5. Приготовить pd.Series с одной колонной и печати, что, но все равно было NaN для всех точек данных

Я могу легко генерировать случайный набор данных и превращать их в pd.DataFrame без проблем (я использовал df2 = DataFrame (np.random.randn (10, 5) columns = ['a', 'b', 'c', 'd', 'e']) в ipython и отображается правильно).

Я сделал массив numpy с теми же данными, и он работал нормально. Я хочу использовать панды, потому что, по-моему, это будет легче для моего анализа в долгосрочной перспективе. Я действительно надеюсь, что это что-то маленькое, чего я не хватает, но я работал над этим какое-то время, поэтому я готов попробовать что угодно.

+1

Я думаю, что вы можете опустить 'ДФ = pd.DataFrame (данные = файл, столбцы = [ 'измерения', 'Дата', 'Time', 'CO2', 'Flow'], DTYPE = объект) ', потому что' file' является 'DataFrame'. – jezrael

+0

Вы эффективно переиндексируете свой старый df, когда передаете его в качестве параметра данных в конструктор DataFrame, если вы передали массив np, тогда он будет работать: 'pd.DataFrame (data = file.значения, столбцы = ['Измерение', 'Дата', 'Время', 'СО2', 'Поток'], dtype = объект) 'Также если у вашего файла нет имен столбцов, вы обычно можете либо передать нужные имена в качестве параметра на 'read_table', но обычно вы должны сказать ему, что нет заголовка' header = None' – EdChum

ответ

1

Обратитесь к документации read_table, вы уже получаете файл DataFrame в файле.

Попробуйте это:

In [71]: f = pd.read_table('table.txt', names=['Measurement', 'Date', 'Time','CO2', 'Flow']) 

In [72]: f 
Out[72]: 
    Measurement  Date   Time   CO2  Flow 
0   1 03/27/2016 13:29:26.098 1431.778943 0.092089 
1   1 03/27/2016 13:29:26.298 1432.410517 0.078570 
2   1 03/27/2016 13:29:26.498 1431.905258 0.089538 
3   1 03/27/2016 13:29:26.698 1431.399999 0.080930 
4   5 03/28/2016 00:00:00.098 1289.422164 0.392945 
5   25 03/28/2016 00:00:00.298 1289.295849 0.145016 
6   25 03/28/2016 00:00:00.498 1289.295849 0.183149 
7   25 03/28/2016 00:00:00.698 1288.790590 0.175114 
8   26 03/28/2016 00:25:16.698 1302.053644 0.162170 

Так почему вы не получаете желаемого результата? Обратите внимание, что после чтения таблицы у него нет нужных имен столбцов.

In [77]: file = pd.read_table('table.txt', index_col=False) 

In [78]: file 
Out[78]: 
    1.000000 03/27/2016 13:29:26.098 1431.778943 0.092089 
0   1 03/27/2016 13:29:26.298 1432.410517 0.078570 
1   1 03/27/2016 13:29:26.498 1431.905258 0.089538 
2   1 03/27/2016 13:29:26.698 1431.399999 0.080930 
3   5 03/28/2016 00:00:00.098 1289.422164 0.392945 
4  25 03/28/2016 00:00:00.298 1289.295849 0.145016 
5  25 03/28/2016 00:00:00.498 1289.295849 0.183149 
6  25 03/28/2016 00:00:00.698 1288.790590 0.175114 
7  26 03/28/2016 00:25:16.698 1302.053644 0.162170 

Поэтому при вызове DataFrame конструктора с существующим DataFrame и именами столбцов, вы получаете все нулевые значения, потому что, нет столбца по фамилии дают во входном DataFrame.

In [80]: df = pd.DataFrame(data=file, columns=['Measurement', 'Date', 'Time','CO2', 'Flow'], dtype=object) 

In [81]: df 
Out[81]: 
    Measurement Date Time CO2 Flow 
0   NaN NaN NaN NaN NaN 
1   NaN NaN NaN NaN NaN 
2   NaN NaN NaN NaN NaN 
3   NaN NaN NaN NaN NaN 
4   NaN NaN NaN NaN NaN 
5   NaN NaN NaN NaN NaN 
6   NaN NaN NaN NaN NaN 
7   NaN NaN NaN NaN NaN 
+0

Ваши сообщения внесли значительный вклад в изучение панд! Я ценю тебя! – Abbas

+0

Спасибо! Я прочитал документацию, но я прочитал «Прочитать общий файл с разделителями ** _ в _ ** DataFrame». Я думал, что мне все еще нужно поставить файл чтения в фреймворк данных. Это был отличный способ объяснить это, спасибо! – zdh0012

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