Entfernen Sie NaN 'Cells', ohne die gesamte ROW (Pandas, Python3)

Im Moment habe ich einen DF so

Word Word2 Word3 Hello NaN NaN My My Name NaN Yellow Yellow Bee Yellow Bee Hive Golden Golden Gates NaN Yellow NaN NaN 

Was ich hoffte, war, alle NaN-Zellen aus meinem Datenrahmen zu entfernen. Also am Ende würde es so aussehen, wo 'Yellow Bee Hive' in Zeile 1 umgegangen ist (ähnlich wie was passiert, wenn du Zellen aus einer Spalte in Excel löscht):

  Word Word2 Word3 1 Hello My Name Yellow Bee Hive 2 My Yellow Bee 3 Yellow Golden Gates 4 Golden 5 Yellow 

Leider ist keiner von diesen Arbeit, weil sie die ganze ROW löschen!

  df = df[pd.notnull(df['Word','Word2','Word3'])] 

oder

  df = df.dropna() 

Wer hat irgendwelche Vorschläge? Soll ich den Tisch neu eingeben?

2 Solutions collect form web for “Entfernen Sie NaN 'Cells', ohne die gesamte ROW (Pandas, Python3)”

 import numpy as np import pandas as pd import functools def drop_and_roll(col, na_position='last', fillvalue=np.nan): result = np.full(len(col), fillvalue, dtype=col.dtype) mask = col.notnull() N = mask.sum() if na_position == 'last': result[:N] = col.loc[mask] elif na_position == 'first': result[-N:] = col.loc[mask] else: raise ValueError('na_position {!r} unrecognized'.format(na_position)) return result df = pd.read_table('data', sep='\s{2,}') print(df.apply(functools.partial(drop_and_roll, fillvalue=''))) 

Erträge

  Word Word2 Word3 0 Hello My Name Yellow Bee Hive 1 My Yellow Bee 2 Yellow Golden Gates 3 Golden 4 Yellow 

Da du die Werte nach oben bewegen willst, musst du einen neuen Datenrahmen erstellen

Begonnen mit –

  Word Word2 0 Hello NaN 1 My My Name 2 Yellow Yellow Bee 3 Golden Golden Gates 4 Yellow NaN 

Nachfolgende Methode –

 def get_column_array(df, column): expected_length = len(df) current_array = df[column].dropna().values if len(current_array) < expected_length: current_array = np.append(current_array, [''] * (expected_length - len(current_array))) return current_array pd.DataFrame({column: get_column_array(df, column) for column in df.columns} 

Gibt –

  Word Word2 0 Hello My Name 1 My Yellow Bee 2 Yellow Golden Gates 3 Golden 4 Yellow 

Sie können auch die vorhandene df mit der gleichen Funktion bearbeiten –

 for column in df.columns: df[column] = get_column_array(df, column) 
  • Wie speichere ich einen TfidfVectorizer für zukünftige Verwendung in scikit-learn?
  • Erhabener Text 2 Konsole und Python 3
  • String in list, in eine Funktion
  • Unterschied zwischen Generatorausdruck und Generatorfunktion
  • Tkinter messagebox verhindert, dass Entry-Widget funktioniert
  • Installieren von Pip-3.2 auf Cygwin
  • PyCharm kann PyGObject 3.0 nicht auflösen, aber Code läuft gut
  • Angesichts der Grenzen finden Sie Intervall
  • Generiere einen zufälligen Brief in Python
  • Funktion innerhalb einer Funktionsausgabe
  • Pip3 ImportError: kann den Namen 'IncompleteRead' nicht importieren
  • Python ist die beste Programmiersprache der Welt.