2016-04-09 23 views
1

Ich habe ein Problem mit Pandas, die ich vor ein paar Monaten noch nicht hatte. Ich versuche, eine Reihe von Daten von Benutzereingaben (mit tkinter) zu nehmen und es in einen Pandas-Datenrahmen zu setzen. Hier ist, was die Daten wie folgt aussieht:Pandas DataFrame kann keine Daten lesen

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 
..... 

Die 5 Spalten gesetzt sind, aber es gibt in der Regel irgendwo zwischen 200.000 bis 800.000 Zeilen in einem Datensatz.

Hier ist mein Code:

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) 

print (file_path) gibt den richtigen Pfad, Print (Datei) zeigt alle richtigen Daten und drucken (df) zeigt dies:

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 
....... 

Ich hatte vorher genau dasselbe gemacht, aber ich verlor das Skript, an dem ich arbeitete, und musste neu anfangen. Es hat vorher perfekt funktioniert, aber ich bin mir nicht sicher, was passiert ist. Ich habe mehrere Dinge versucht, es zu beheben:

  1. Ändern pd.read_table
  2. Changed index =, dtype = und andere Eigenschaften von pd.DataFrame
  3. die Datei pd.io.parsers.read_table Converted in einem CSV-und gebrauchten pd.read_csv
  4. die Datei deutlich Verkürzte
  5. ein pd.Series mit einer einzigen Spalte und Druck erzeugen, der aber immer noch NaN für alle Datenpunkte hatten

Ich kann leicht eine zufällige Menge von Daten erzeugen und es zu einem pd.DataFrame ohne Problem machen (ich verwendete df2 = DataFrame (np.random.randn (10, 5) columns = ['a', 'b', 'c', 'd', 'e']) in ipython und es wurde korrekt angezeigt).

Ich machte eine Reihe mit den gleichen Daten und es funktionierte gut. Ich möchte Pandas benutzen, weil ich denke, dass es für meine Analyse auf lange Sicht einfacher sein wird. Ich hoffe wirklich, dass es etwas Kleines ist, dass ich vermisse, aber ich arbeite seit einer Weile daran, also bin ich bereit, alles zu versuchen.

+1

Ich denke, man weglassen kann 'df = pd.DataFrame (data = Datei, Spalten = [ 'Measurement', 'Datum', 'Zeit', 'CO2', 'Flow'], dtype = Objekt) ', weil' Datei' 'DataFrame' ist. – jezrael

+0

Sie werden Ihr altes df effektiv neu indizieren, wenn Sie es als Datenparameter an den DataFrame-Konstruktor übergeben. Wenn Sie ein np-Array übergeben, funktioniert es: 'pd.DataFrame (data = file.Werte, Spalten = ['Messung', 'Datum', 'Zeit', 'CO2', 'Fluss'], dtype = Objekt) 'Auch wenn Ihre Datei keine Spaltennamen hat, können Sie die gewünschten Namen normalerweise als Parameter übergeben zu 'read_table', aber normalerweise muss man sagen, dass es keinen Header' header = None' gibt. – EdChum

Antwort

1

In der Dokumentation von read_table finden Sie bereits den DataFrame in Datei.

Versuchen Sie folgendes:

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 

Also, warum Sie waren nicht das gewünschte Ergebnis zu bekommen? Beachten Sie, dass nach dem Lesen der Tabelle keine gewünschten Spaltennamen vorhanden sind.

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 

Daher, wenn Sie Dataframe Konstruktor mit einem bestehenden Datenrahmen und mit Spaltennamen nennen, erhalten Sie alle Null-Werte, da es keine Spalte ist durch die Namen in dem Eingangsdatenrahmen geben.

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

Ihre Beiträge haben mir wesentlich beim Lernen von Pandas geholfen! Ich schätze Sie! – Abbas

+0

Danke! Ich habe die Dokumentation gelesen, aber ich habe gelesen, dass die allgemeine Datei mit Trennzeichen gelesen wurde ** _ in _ ** DataFrame. Ich dachte, ich müsste die gelesene Datei noch in einen Datenrahmen einfügen. Das war auch eine tolle Art, es zu erklären, danke! – zdh0012