Pandas Dataframe: заменить символ условно - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть датафрейм со столбцом с именем "Размер" В этом столбце есть некоторые значения, содержащие размер списка приложений для Android.

Size
8.7M
68M
2M

Мне нужно заменить эти значения на:

Size:
8700000
68000000
...

Я подумал о функции, которая проверяет, есть ли точка в строке '.'. Если оно существует, измените значение M на пять нулей (00000). Если нет, измените значение M на шесть нулей (000000). Не могли бы вы, ребята, помочь мне с этим?

1 Ответ

0 голосов
/ 04 ноября 2018

Общее решение для замены на несколько единиц:

#dict for replace
_prefix = {'k': 1e3,    # kilo
           'M': 1e6,    # mega
           'B': 1e9,    # giga
}
#all keys of dict separated by | (or)
k = '|'.join(_prefix.keys())
#extract values to new df
df1 = df['Size'].str.extract('(?P<a>[0-9.]*)(?P<b>' + k +')*', expand=True)
#convert numeric column to float
df1.a = df1.a.astype(float)
#map values by dictionary, replace NaN (no prefix) to 1
df1.b = df1.b.map(_prefix).fillna(1)
#multiple columns together
df['Size'] = df1.a.mul(df1.b).astype(int)
print (df)
       Size
0   8700000
1  68000000
2   2000000

Если хотите только заменить M Решение должно быть упрощено:

df['Size'] = df['Size'].str.replace('M', '').astype(float).mul(1e6).astype(int)
print (df)
       Size
0   8700000
1  68000000
2   2000000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...