WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Import von CSV Datei unvollständig

 

Lloyd Blankfein
Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 23.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.07.2013, 13:39     Titel: Import von CSV Datei unvollständig
  Antworten mit Zitat      
Hallo,

anhängende Datei cs-test.csv möchte ich mit dem Import Wizard importieren. Ich benutze diese Einstellungen (siehe die Dateien settings1.png und settings2.png).

Die Daten sind heterogen: In Zeile 9, Spalte 7, steht der Wert NA. Dieser wird in ein NaN umgewandelt. So weit so gut! Des Weiteren werden aber auch die Werte der Spalten 8-12 in NaNs umgewandelt. Die restlichen Zeilen werden nicht importiert.

Mittels csvread bekomme ich eine Fehlermeldung:

Code:

data1=csvread('cs-training.csv',2,1)
 


Zitat:

??? Error using ==> dlmread at 145
Mismatch between file and format string.
Trouble reading number from file (row 6, field 7) ==> NA,8,

Error in ==> csvread at 52
m=dlmread(filename, ',', r, c);


Auch hier hat Matlab ein Problem mit den heterogenen Daten.

Ich möchte die NAs und fehlende Werte, in NaNs übersetzen. Wie mache ich das?

Vielen Dank für eure Hilfe,
Lloyd

settings2.png
 Beschreibung:

Download
 Dateiname:  settings2.png
 Dateigröße:  49.7 KB
 Heruntergeladen:  716 mal
settings1.png
 Beschreibung:

Download
 Dateiname:  settings1.png
 Dateigröße:  98.33 KB
 Heruntergeladen:  758 mal
cs-test.zip
 Beschreibung:

Download
 Dateiname:  cs-test.zip
 Dateigröße:  1.79 MB
 Heruntergeladen:  806 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.07.2013, 14:55     Titel:
  Antworten mit Zitat      
Hallo,

ohne mir das im Detail angeschaut zu haben: versuchs doch mal mit textscan. Dort kannst du mit der Option 'TreatAsEmpty' angeben, dass z.B. 'NA' als leer behandelt werden soll.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lloyd Blankfein
Themenstarter

Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 23.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2013, 13:31     Titel:
  Antworten mit Zitat      
Code:

fid=fopen('cs-test.csv')
C = textscan(fid,'%d %d %f %d %d %d %d %d %d %d %d %d')
 


C ist ein leerer 1x12 cell-array. Mit diesem Format C{1,n}<0x1 int32> bzw. C{1,3}<0x1 double>.

Eine Fehlermeldung gibt es nicht.

Anbei noch eine Info zu den Daten.
1) csv Datei, die 1. Zeile mit dem Datum habe ich gelöscht.
2) Das Zellenformat im Sheet ist Standard
3) Ein Datensatz sieht so aus: 1,,0.88551908,43,0,0.177512717,5700,4,0,0,0,0

Nach meinem Verständnis von textscan müssten die Daten zumindest bis zum 1. NA eingelsen werden.

Hat jemand eine Idee?

Lloyd

cs-testadj.zip
 Beschreibung:

Download
 Dateiname:  cs-testadj.zip
 Dateigröße:  1.79 MB
 Heruntergeladen:  949 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.07.2013, 14:04     Titel:
  Antworten mit Zitat      
Hallo,

man muss auf die Optionen achten. So klappts:

Code:
fid=fopen('cs-testadj.csv');
C = textscan(fid,'%d  %f %d %d %d %d %d %d %d %d %d', ...
    'Delimiter',',','MultipleDelimsAsOne', true, 'TreatAsEmpty', 'NA');
fclose(fid);

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lloyd Blankfein
Themenstarter

Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 23.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2013, 19:14     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank, erstmal!

Mit deinem Code werden alle "NA" in eine 0 umgewandelt. Ich möchte aber, dass die "NA" in ein MATLAB NaN umgewandelt werden.

Bei diesem Versuch werden die "NA" in eine 0 umgewandelt:
Code:

C = textscan(fid,'%d  %f %d %d %d %d %d %d %d %d %d', 'Delimiter',',','MultipleDelimsAsOne',  true, 'TreatAsEmpty', 'NA', 'EmptyValue', NaN);
 


Hier klappt die "Übersetzung" der "NA" in den kleinsten int32-Wert (-2147483648):
Code:

C = textscan(fid,'%d  %f %d %d %d %d %d %d %d %d %d', 'Delimiter',',','MultipleDelimsAsOne',  true, 'TreatAsEmpty', 'NA', 'EmptyValue', -Inf);
 


Einen int- oder double-array, kann man prinzipiell mit NaNs füllen! Wieso klappt das hier nicht?

Grüße,
Lloyd
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.07.2013, 20:22     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Einen int- oder double-array, kann man prinzipiell mit NaNs füllen!

Ein Double-Array: ja. Ein int-Array: nein, da die verfügbaren Bits alle zur Darstellung bestimmter Zahlen verwendet werden und NaN folglich nicht darstellbar ist.

Sieht man auch schön anhand eines Beispiels:
Code:
v = ones(1,4,'int32');
v(1) = NaN


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lloyd Blankfein
Themenstarter

Forum-Century

Forum-Century



Beiträge: 149
Anmeldedatum: 23.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.07.2013, 21:15     Titel:
  Antworten mit Zitat      
Oh, vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.