La conversión de $ 1B en serie

Una caliente :

Puedo recuperar un archivo CSV desde el sitio web de NASDAQ con unas columnas (Ticker, marketcap ...). Yo uso read_csv de pandas para obtener una trama de datos. Mi problema es que no puedo convertir el formato de la columna de marketcap en un número. Esta es la forma en la columna de la marketcap se ve así:

MarketCap
$5.54B
$526.85M
$28.41M
nan
nan

Lo ideal sería que me gustaría dejar el signo $ y convertir B en 1'000'000'000 y M en 1'000'000 La reemplazar / funciones to_replace en pandas no parecen trabajo aquí. Me gustaría actualizar mi trama de datos de la siguiente manera:

MarketCap
5'540'000'000'000
526'850'000'000
28'410'000'000
nan
nan

(He usado "como separador de miles sólo para mayor claridad). No me importa acerca de los valores nan, por lo que este no se puede quitar / ignorado por ahora.

He intentado utilizar el método de sustitución de pandas de la siguiente manera:

df['MarketCap].replace(to_replace= ['B', 'M'], values= ['*1000000000', '*1000000'], inplace=True)

Lamentablemente, desde la columna es de formato de cadena de lo anterior no se aplica la multiplicación.

Jezreel:

Usar Series.str.stripcon Series.str.extract, a continuación, múltiple primera columna convierte en flotadores y segunda asignada por Series.map:

df1 = df['MarketCap'].str.strip('$').str.extract(r'(\d+\.\d+)([BM]+)')
df['MarketCap'] = df1[0].astype(float) * df1[1].map({'B': 1000000000, 'M':1000000})

print (df)
      MarketCap
0  5.540000e+09
1  5.268500e+08
2  2.841000e+07
3           NaN
4           NaN

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=298391&siteId=1
Recomendado
Clasificación