diesen Code vor:Pandas Löschen von Zeilen von Datenrahmen basierend auf Bedingung
from StringIO import StringIO
import pandas as pd
txt = """a, RR
10, 1asas
20, 1asasas
30,
40, asas
50, ayty
60, 2asas
80, 3asas"""
frame = pd.read_csv(StringIO(txt), skipinitialspace=True)
print frame,"\n\n\n"
l=[]
for i,j in frame[~ frame['RR'].str.startswith("1", na=True)]['RR'].iteritems():
if j.startswith(('2','3')):
if frame[frame['RR'].str.startswith("1", na=False)]['RR'].str.match("1"+j[1:], as_indexer = True).any():
l.append(i)
else:
if frame[frame['RR'].str.startswith("1", na=False)]['RR'].str.match("1"+j, as_indexer = True).any():
l.append(i)
frame = frame.drop(frame.index[l])
print frame
Was ich hier ist tue,
1) Schleife durch Datenrahmen jeden RR
fallen zu lassen, die bereits 1RR
in Datenrahmen hat
2) Wenn RR
am Anfang 2 or 3
hat, dann fallen, wenn das RR
1RR[1:]
im Dataframe hat.
3) Wenn RR
startswith 1
oder NaN
ist, berühren Sie es nicht.
Der Code funktioniert gut, aber dieser dataframe
wird bis zu 1 Million Einträge haben und ich glaube nicht, dass dieser Code optimiert ist.Wenn ich gerade mit pandas
gestartet habe, habe ich begrenzte Kenntnisse. Gibt es eine Möglichkeit, dies ohne iteration
zu erreichen. Hat pandas
ein eingebautes Dienstprogramm, um dies zu tun?
Was meinst du mit '1RR'? – IanS
@IanS die string '1' +' RR' wie wir hier haben 'asas' und auch' 1asas' so dass 'asas' fallen gelassen werden – vks
Ich habe keine Zeit für eine vollwertige Antwort, aber dieser Code könnte weisen Sie in die richtige Richtung: 'series1 = frame.loc [frame ['RR']. str.startswith (" 1 ", na = Falsch), 'RR']; frame.loc [(Rahmen ['RR']. str.startswith ("2")) | (frame ['RR']. str.startswith ("3")), 'RR']. str.slice (1) .isin (series1.str.slice (1)) '(behandelt Ihre zweite Bedingung). – IanS