Wie Entferne ich alle nicht numerischen Zeichen aus allen Werten in einer bestimmten Spalte in pandas dataframe?
Ich habe einen dataframe die wie folgt aussieht:
A B C
1 red78 square big235
2 green circle small123
3 blue45 triangle big657
Ich muss in der Lage sein, zu entfernen, die nicht-numerische Zeichen aus allen Zeilen in Spalte C so, dass mein dataframe aussieht:
A B C
1 red78 square 235
2 green circle 123
3 blue45 triangle 657
Ich habe versucht mit der folgenden aber der Fehler erwartet, string oder buffer:
import re
dfOutput.imgID = dfOutput.imgID.apply(re.sub('[^0-9]','', dfOutput.imgID), axis = 0)
Was sollte ich stattdessen tun?
Code zu erstellen dataframe:
dfObject = pd.DataFrame()
dfObject.set_value(1, 'A', 'red78')
dfObject.set_value(1, 'B', 'square')
dfObject.set_value(1, 'C', 'big235')
dfObject.set_value(2, 'A', 'green')
dfObject.set_value(2, 'B', 'circle')
dfObject.set_value(2, 'C', 'small123')
dfObject.set_value(3, 'A', 'blue45')
dfObject.set_value(3, 'B', 'triangle')
dfObject.set_value(3, 'C', 'big657')
InformationsquelleAutor ag14 | 2017-05-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
str.extract
bestehen und ein regex-pattern zu extrahieren nur die numerischen Teile:Können Sie bei Bedarf gegossen, um
int
:extract
, verwendet dieser Weg, wird nur extrahieren einer Folge von Ziffern aus der input-Felder. Wenn es mehrere numerische teilen, getrennt durch nicht-numerische Zeichen, diese Antwort wird nur extrahieren, die die erste Folge von Zeichen.Das gibt mir
E:\WPy-3662\python-3.6.6.amd64\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy """Entry point for launching an IPython kernel.
in Python 3.6.6es bedeutet, dass Ihr df ist eine Ansicht oder ein Stück des ursprünglichen df-daher die Warnung, ich kann nicht kommentieren, ohne zu sehen, Ihre vollständigen code, und wie Sie verursacht. Im Grunde, wenn Sie aktiv werden wollen, auf kopieren, dann tun Sie
df1 = df.copy()
dann, was Sie tun, mitdf1
erzeugt keine Warnung, aber wenn Sie wirklich wollen, um den Betrieb im original, dann müssen Sie verwenden.loc
so ist es explizit, dass Sie bedienen möchten, auf einer Ansicht finden Sie unter " Verwandte: stackoverflow.com/questions/20625582/...Danke. Diese Antwort der das problem behebt.
versuchen Sie regex Muster
'(\d+\.*\d*)'
oder nutzen Sie einfach die andere Antwort ersetzen Sie die Zeichen mit leeren Zeichenfolgen und alle Links werden numerische ZeichenInformationsquelleAutor EdChum
Können Sie
.str.replace
mit einem regex:Ausgabe:
\D
Charakter-KlasseInformationsquelleAutor Scott Boston
Können Sie dies auch über eine
lambda
Funktion mitstr.isdigit
:InformationsquelleAutor jpp