2016-09-19 1 views
0

Ich habe folgenden Datenrahmen:Wie man teilweise Inhalt von Zelle in einem Datenrahmen entfernen Python

import pandas as pd  
df = pd.DataFrame([ 
     ['\nSOVAT\n', 'DVR', 'MEA', '\n195\n'], 
     ['PINCO\nGALLO ', 'DVR', 'MEA\n', '195'], 
    ]) 

, die wie folgt aussieht:

enter image description here

Mein Ziel ist jede einzelne Zelle zu analysieren des Datenrahmens, so dass:

  • wenn der Teilstring \n erscheint nur einmal, dann lösche ich es zusammen mit allen Zeichen, die davor stehen;
  • wenn der Teil \n in einer bestimmten Zelle mehr als einmal vorkommt, dann ist all \n zusammen mit enthaltenen ich entfernen, was kommt vor und nach ihnen (außer für das, was ist dazwischen)

Der Ausgang des Codes

enter image description here

Hinweis: dies sein sollte, so weit ich nur wissen, wie das zu entfernen, was vor oder nach der Teilkette kommt mit dem folgenden Befehl:

df = df.astype(str).stack().str.split('\n').str[-1].unstack() 
df = df.astype(str).stack().str.split('\n').str[0].unstack() 

Doch diese Codezeile führt mich nicht zu den gewünschten Ergebnissen, da die Ausgabe lautet:

enter image description here

Antwort

1

df.replace und einige regex.

In [1]: import pandas as pd 
    ...: df = pd.DataFrame([ 
    ...:   ['\nSOVAT\n', 'DVR', 'MEA', '\n195\n'], 
    ...:   ['PINCO\nGALLO ', 'DVR', 'MEA\n', '195'], 
    ...:  ]) 
    ...: 

In [2]: df.replace(r'.*\n(.*)\n?.*', r'\1', regex=True) 
Out[3]: 
     0 1 2 3 
0 SOVAT DVR MEA 195 
1 GALLO DVR  195 
Verwandte Themen