Hier erwartet die Durchführung ist meine Funktion:Python Pandas df.ix nicht als
def clean_zipcodes(df):
df.ix[df['workCountryCode'].str.contains('USA') & \
df['workZipcode'].astype(str).str.len() > 5, 'workZipcode'] = \
df['workZipcode'].astype(int).floordiv(10000)
df.ix[df['contractCountryCode'].str.contains('USA') & \
df['contractZipcode'].astype(str).str.len() > 5, 'contractZipcode'] = \
df['contractZipcode'].astype(int).floordiv(10000)
return df
Hier ist meine Testfunktion von dem, was ich erwarten:
def test_clean_zipcodes():
testDf = pandas.DataFrame({'unique_transaction_id' : ['1', '1', '1'],
'workZipcode' : [838431000, 991631000, 99163],
'contractZipcode' : [838431000, 991631000, 99163],
'workCountryCode' : ['USA: STUFF', 'NONE: STUFF', 'USA: STUFF'],
'contractCountryCode' : ['USA: STUFF', 'NONE: STUFF', 'USA: STUFF']})
resultDf = pandas.DataFrame({'unique_transaction_id' : ['1', '1', '1'],
'workZipcode' : [83843, 991631000, 99163],
'contractZipcode' : [83843, 991631000, 99163],
'workCountryCode' : ['USA: STUFF', 'NONE: STUFF', 'USA: STUFF'],
'contractCountryCode' : ['USA: STUFF', 'NONE: STUFF', 'USA: STUFF']})
assert resultDf.equals(clean_zipcodes(testDf))
Abgesehen von Vertiefungen wesenseigen nicht (didn‘ t konvertieren für SO-Formatierung), führt der df.ix nicht wie erwartet aus. In den Spalten contractZipcode und workZipcode werden keine Transformationen durchgeführt. Die erste Zeile sollte in 83843 geändert werden, wie in resultDf angegeben.
Vielen Dank im Voraus!