Измените столбец со строкой процентов, чтобы переместить кадр данных панд - PullRequest
0 голосов
/ 04 июня 2018

Итак, я, по сути, получил это:

,    pct_intl_student
2879      %
2880     9%
2881    NaN
2882     1%
2883    NaN
Name: pct_intl_student, Length: 2884, dtype: object

Можно ли каким-нибудь простым способом заменить все строки со знаком процента на них на десятичное число?Итак, в основном это:

,    pct_intl_student
2979    0
2880    0.09
2881    NaN
2882    0.01
2883    NaN
Name: pct_intl_student, Length: 2884, dtype: object

Мне нужно, чтобы значения NaN оставались на месте, после этого они будут преобразованы в среднее процентное число.Дело также в том, что все значения NaN должны оставаться как NaN, а строки, содержащие только строку «%», должны стать 0.

Я пытался:

df['pct_intl_student'] = df['pct_intl_student'].str.rstrip('%').astype('float') / 100.0

Но это поднимает этоошибка:

ValueError: не удалось преобразовать строку в число с плавающей точкой:

Так что я сейчас в растерянности

Надеюсь, кто-то может мне помочьиз.

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вот пример, который лучше описывает вашу проблему:

df = pd.DataFrame({"a": ["9%", "10%", np.nan, '%']})
print(df)
#     a
#0   9%
#1  10%
#2  NaN
#3    %

Вы хотите, чтобы строка % превратилась в значение 0.

Один из способов - изменить код на str.replace вместо str.strip.Здесь я заменю % s на .0

df['a'].str.replace(r'%', r'.0').astype('float') / 100.0
#0    0.09
#1    0.10
#2     NaN
#3    0.00
#Name: a, dtype: float64
0 голосов
/ 04 июня 2018

Обновление:

df['pct_intl_student'] = (pd.to_numeric(df['pct_intl_student'].str[:-1])
                            .div(100)
                            .mask(df['pct_intl_student'] == '%', 0))

Выход:

      pct_intl_student
2879              0.00
2880              0.09
2881               NaN
2882              0.01
2883               NaN

Использование:

df['pct_intl_student'] = pd.to_numeric(df['pct_intl_student'].str.strip('%')).div(100)

Или

df['pct_intl_student'] = pd.to_numeric(df['pct_intl_student'].str[:-1]).div(100)

Выход:

2880    0.09
2881     NaN
2882    0.01
2883     NaN
Name: pct_intl_student, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...