convertir la columna de dataframe pandas de cadena hexadecimal a int

Tengo un dataframe muy grande que me gustaría evitar iterar a través de cada fila y quiero convertir toda la columna de cadena hexadecimal a int. No procesa la cadena correctamente con astype, pero no tiene problemas con una sola entrada. ¿Hay una manera de decirle a Astype que el tipo de datos es base 16?

IN: import pandas as pd df = pd.DataFrame(['1C8','0C3'], columns=['Command0']) df['Command0'].astype(int) OUT: ValueError: invalid literal for int() with base10: '1C8' 

Esto funciona pero quiere evitar la iteración de la fila.

 for index, row in df.iterrows(): print(row['Command0']) 

Estoy leyendo esto desde un CSV pd.read_csv(open_csv, nrows=20) así que si hay una manera de leerlo y decirle explícitamente cuál es el formato, ¡entonces eso sería aún mejor!

Usted podría utilizar apply .

 df.Command0.apply(lambda x: int(x, 16)) >>> 0 456 1 195 Name: Command0, dtype: int64 

Y puede hacer esto con la llamada pd.read_csv usando el parámetro converters :

 df = pd.read_csv("path.txt", converters={"Command0": lambda x: int(x, 16)}) 

Puede utilizar la apply según la solución de @ Andrew , pero lambda no es necesaria y agrega gastos generales. En su lugar, utilice apply con un argumento de palabra clave:

 res = df['Command0'].apply(int, base=16) print(res) 0 456 1 195 Name: Command0, dtype: int64 

Con pd.read_csv , puedes usar functools.partial :

 from functools import partial df = pd.read_csv(open_csv, nrows=20, converters={'Command0': partial(int, base=16)})