Estoy usando python csvkit
para comparar 2 archivos como este:
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)
Actualmente estoy corriendo el archivo a través de una secuencia de comandos antes de la mano que elimina los espacios de la columna employee_id
.
Un ejemplo de employee_id
s:
37 78973 3
23787
2 22 3
123
¿Hay alguna forma de hacer que csvkit
lo haga y me ahorre un paso?
Puedes strip()
una Serie entera en Pandas usando .str.strip():
df1['employee_id'] = df1['employee_id'].str.strip()
df2['employee_id'] = df2['employee_id'].str.strip()
Esto eliminará los espacios en blanco iniciales y finales de la columna employee_id
tanto en df1
como en df2
.
Como alternativa, puede modificar sus líneas read_csv
para utilizar también 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)
Parece que está intentando eliminar espacios en una cadena que contiene números. Usted puede hacer esto por:
df1['employee_id'] = df1['employee_id'].str.replace(" ","")
df2['employee_id'] = df2['employee_id'].str.replace(" ","")
Puedes hacer el strip()
en pandas.read_csv()
como:
pandas.read_csv(..., converters={'employee_id': str.strip})
Y si usted necesita para eliminar sólo los espacios en blanco:
pandas.read_csv(..., converters={'employee_id': str.lstrip})
Y para eliminar todos los espacios:
def strip_spaces(a_str_with_spaces):
return a_str_with_spaces.replace(' ', '')
pandas.read_csv(..., converters={'employee_id': strip_spaces})