2017-04-10 2 views
2

Ich verwende Python csvkit 2 Dateien wie diese zu vergleichen:Pandas - Streifen weißer Raum

df1 = pd.read_csv('input1.csv', sep=',\s+', delimiter=',', encoding="utf-8") 
df2 = pd.read_csv('input2.csv', sep=',\s,', delimiter=',', encoding="utf-8") 
df3 = pd.merge(df1,df2, on='employee_id', how='right') 
df3.to_csv('output.csv', encoding='utf-8', index=False) 

Derzeit bin ich die Datei über einen Skript vor der Hand ausgeführt wird, die Leerzeichen aus der employee_id Spalte Streifen.

Ein Beispiel für employee_id s:

37 78973 3 
23787 
2 22 3 
123 

Gibt es eine Möglichkeit, es zu erhalten zu tun csvkit zu und mir einen Schritt sparen?

+0

'df1.employee_id = df1.employee_id.str.strip()' – Taylor

+1

Was ist mit 'skipinitialspace = True' in' read_csv'? –

Antwort

4

Sie können strip() eine ganze Serie in Pandas .str.strip() mit:

df1['employee_id'] = df1['employee_id'].str.strip() 
df2['employee_id'] = df2['employee_id'].str.strip() 

Dies entfernt/führenden Whitespaces auf den employee_id Spalt in beide df1 und df2

Alternativ Hinter können Sie Ihre read_csv Linien ändern verwenden Sie auch skipinitialspace=True

df1 = pd.read_csv('input1.csv', sep=',\s+', delimiter=',', encoding="utf-8", skipinitialspace=True) 
df2 = pd.read_csv('input2.csv', sep=',\s,', delimiter=',', encoding="utf-8", skipinitialspace=True) 

Offenbar versuchen Sie, Leerzeichen in einer Zeichenfolge mit Zahlen zu entfernen. Sie können dies tun, indem sie:

df1['employee_id'] = df1['employee_id'].str.replace(" ","") 
df2['employee_id'] = df2['employee_id'].str.replace(" ","") 
+0

Würde dieser Ansatz auch dann funktionieren, wenn der Raum nicht entweder nach hinten oder nach vorne führt? zB '23 4883 2 '? – fightstarr20

+0

Nein. 'Strip()' funktioniert nur bei führenden und nachfolgenden Leerzeichen. – Andy

+0

Kann ich stattdessen Regex oder ähnliches verwenden? – fightstarr20

2
Df['employee']=Df['employee'].str.strip() 
4

Sie können in pandas.read_csv() wie die strip() tun:

pandas.read_csv(..., converters={'employee_id': str.strip}) 

Und wenn Sie brauchen nur führende Leerzeichen abzustreifen:

pandas.read_csv(..., converters={'employee_id': str.lstrip}) 

Und um alle Leerzeichen zu entfernen:

def strip_spaces(a_str_with_spaces): 
    return a_str_with_spaces.replace(' ', '') 

pandas.read_csv(..., converters={'employee_id': strip_spaces})