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

NaN's aus einer Tabelle entfernen

 

jrbbrt
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2018, 11:23     Titel: NaN's aus einer Tabelle entfernen
  Antworten mit Zitat      
Hallo ihr Lieben!

Meine Daten: Eine Tabelle (18316x4). Dabei sind in Spalte 3 und 4 Strings zu finden, die jedoch Zeiten/ein Datum darstellen. Nun kommt es gelegentlich vor, dass sich in der vierten Spalte ein "NaN" findet.

Das Ziel: Letztendlich möchte ich meine Tabelle von den NaN's säubern. Und die beiden Spalten, die die Zeiten enthalten von String in eine Datetime umwandeln.

Ansätze bisher: Zunächst habe ich versucht, meine strings in Zeiten mit der Funktion datetime umzuwandeln. Das hat bei Reihe 3 (date_d) super funktioniert, bei Reihe 4 (date_r) leider nicht.

Code:
date_d=datetime(t.d(:,1),'Inputformat','dd.MM.yyyy');
date_r=datetime(t.r(:,1),'Inputformat','dd.MM.yyyy HH:mm:ss');


Als Fehlermeldung wurde mir folgendes angezeigt: "Error using datetime (line 639) Input data must be a numeric array, a string array, a cell array containing character vectors, or a char matrix."

Hat jemand eine Idee wie das zu Stande kommen kann?

Die erste Vermutung meinerseits war, dass es an den NaNs liegt ... Die übrigens so [NaN] in meinen Zellen eingetragen sind.

Meine Ansätze, um die NaNs zu entfernen waren u.a. isnan , find oder die rmmissing Funktion zu verwenden ... Leider ohne Erfolg. Entweder war die Funktion nicht für ein Argument einer Zelle geeignet, ich hatte zu viele Input-Argumente, etc. ...

Meine Frage an euch: Wie kann ich möglichst einfach die "NaN"-Strings aus meiner Tabelle entfernen, bzw. parallel die gesamte Zeile in der ich es finde löschen?

Ich freue mich über jede Hilfe!! Beste Grüße!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.07.2018, 11:59     Titel:
  Antworten mit Zitat      
Hallo,

ein Beispieldatensatz wäre hilfreich.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2018, 12:57     Titel:
  Antworten mit Zitat      
Reicht folgendes als Beispieldatensatz aus?

Viele Grüße!

Beispieldaten.mat
 Beschreibung:
Beispieldatensatz

Download
 Dateiname:  Beispieldaten.mat
 Dateigröße:  1.14 KB
 Heruntergeladen:  372 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.07.2018, 13:09     Titel:
  Antworten mit Zitat      
Hallo,

Code:
missing = cellfun(@(x) all(isnan(x)), bsp.zeit2);
bsp.zeit2(missing) = {''};


danach sollte auch datetime gut klappen.

Wie bekommst du denn den Table? Mich verwundert, dass die Datumsangaben nicht automatisch datetime sind. Ich kann mir ggf. auch mal einen Rohdatensatz ansehen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 13.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.07.2018, 13:32     Titel:
  Antworten mit Zitat      
Tatsache funktioniert jetzt auch datetime. Danke dir!

Besteht denn auch die Möglichkeit die komplette Zeile x in der das NaN gelöscht wurde zu entfernen? Sprich, Zeile x sowohl von Spalte 1, 2, 3 und 4? Oder macht das alles unnötig kompliziert?

Die Daten aus meinem Table hole ich mir mittels SQL-Abfrage aus meiner Datenbank raus. Den Cellarray der mir dabei ausgegeben wird, wandle ich anschließend in eine Tabelle um.

Code:
t=cell2table(d_r','VariableNames',{'nummer','art','zeit1','zeit2'});
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.07.2018, 13:49     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Besteht denn auch die Möglichkeit die komplette Zeile x in der das NaN gelöscht wurde zu entfernen? Sprich, Zeile x sowohl von Spalte 1, 2, 3 und 4?
Code:
bsp(missing,:) = [];


Du kannst dir die Daten auch direkt als Table geben lassen:
Code:
setdbprefs('DataReturnFormat', 'table')


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DerElch
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 18.07.18
Wohnort: Wien
Version: 2017b
     Beitrag Verfasst am: 18.07.2018, 09:29     Titel:
  Antworten mit Zitat      
Macht er dann eigentlich bei den Missing in der datetime Spalte ein NaT?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.07.2018, 11:19     Titel:
  Antworten mit Zitat      
Hallo,

fehlende Werte in datetime werden als NaT dargestellt, ja.
Der konkrete Bezug zum Thema fehlt mir da aber...

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
DerElch
Forum-Anfänger

Forum-Anfänger


Beiträge: 21
Anmeldedatum: 18.07.18
Wohnort: Wien
Version: 2017b
     Beitrag Verfasst am: 18.07.2018, 13:33     Titel:
  Antworten mit Zitat      
War ein Gedankenfehler meinerseits.
Private Nachricht senden Benutzer-Profile anzeigen
 
ulru
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 18.07.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2018, 16:37     Titel:
  Antworten mit Zitat      
Um aus einer Tabelle (18316x4) alle Zeilen zu entfernen, die in Spalte 4 ein NAN enthalten, würde ich wie folgt vorgehen: Die Tabelle sei t und ihre bereinigte Version sei rt.
Code:

s=find(~isnan(t(:,4))); % finde alle Zeilen ohne NaN in der 4.Spalte
rt=t(s,:);                     % erstelle die bereinigte Matrix
 
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 - 2024 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.