Панды - заменить знаки% в данных и вернуть их обратно - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть следующее df:

Name   Jan_2018   Feb_2018  Mar_2018
A      33%        40%       42%
B      20%        35%       50%
C      21%        31%       12%

Я выполняю некоторые операции с числовыми данными (суммами, средними значениями и т. Д.), Поэтому мне нужно удалить знак%, чтобы панды перестали воспринимать их какстроки.Однако мой вывод должен иметь знак% назад.

Кроме того, я не могу жестко закодировать столбцы, так как в будущем может быть добавлено больше.

Какой самый простой способ удалить знаки% из числовых данных и добавить их снова позже?

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Заменить:

df = df.replace({'%':''}, regex=True)

    Name    Jan_2018    Feb_2018    Mar_2018
0   A       33          40          42
1   B       20          35          50
2   C       21          31          12

Преобразовать в числа

df = df.apply(lambda s: pd.to_numeric(s, errors='ignore'))

df.dtypes
Name        object
Jan_2018     int64
Feb_2018     int64
Mar_2018     int64
dtype: object

Преобразовать обратно в % только числовые столбцы

mask = df.dtypes[[np.issubdtype(x, np.number) for x in df.dtypes]].index
df.loc[:, mask] = df.loc[:, mask].astype(str).add('%')

    Name    Jan_2018    Feb_2018    Mar_2018
0   A       33%         40%         42%
1   B       20%         35%         50%
2   C       21%         31%         12%
0 голосов
/ 26 сентября 2018

Удаление % из pandas dataframe.

df.replace({'%': ''}, regex=True)

Или, если вы хотите заменить определенный столбец, тогда:

df['some_col'].replace({'%': ''}, regex=True)

df['some_col'] = df['some_col'].replace({'%':''}, regex=True)

Атрибут str для doc

df['some_col'] = df['some_col'].str.replace('%', '')

еще один хороший пример игнорирования символов и выбора только числовых значений с пандами:

Используйте str.strip, если префикс фиксированный или str.replaceесли нет:

data = pandas.Series(["U$ 192.0"])
data.str.replace('^[^\d]*', '').astype(float)

При этом удаляются все нечисловые символы слева от числа и приводится к плавающей запятой.

0 голосов
/ 26 сентября 2018

Удалить %

df=df.apply(lambda x : x.str.rstrip('%'))
df
#df=df.apply(pd.to_numeric,errors='ignore')

Out[156]: 
  Name Jan_2018 Feb_2018 Mar_2018
0    A       33       40       42
1    B       20       35       50
2    C       21       31       12

Добавить обратно

#df.iloc[:,1:]=df.iloc[:,1:].astype(str)
df.iloc[:,1:]+='%'
df
Out[160]: 
  Name Jan_2018 Feb_2018 Mar_2018
0    A      33%      40%      42%
1    B      20%      35%      50%
2    C      21%      31%      12%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...