Как я могу заменить все вхождения 0 на 1 в моем фрейме данных? - PullRequest
3 голосов
/ 09 ноября 2019

Я работаю с фреймом данных, который выглядит примерно так:

duration count 0 23 2 12 0 43 2 12 0 43 4 65 1 22

Я просто хочу заменить все 0 в столбце длительности на 1. Я попытался сделать это с помощью

df_sorted = df_sorted.replace(df_sorted['duration'] == 0, df_sorted['duration'] == 1)

Тем не менее, я запускаю это, и кадр данных кажется незатронутым. Я не получаю сообщение об ошибке и, кажется, ничего не меняется. Я работаю с гораздо большим массивом данных с гораздо большим количеством строк / столбцов, так что, может быть, мне не хватает, что что-то еще меняется? Несмотря на это, 0 все еще остаются после того, как я запускаю строку кода.

Ответы [ 3 ]

3 голосов
/ 09 ноября 2019

коротко и сладко

df_sorted['duration'] += df_sorted['duration'].eq(0)

df_sorted

   duration  count
0         1     23
1         2     12
2         1     43
3         2     12
4         1     43
5         4     65
6         1     22
1 голос
/ 09 ноября 2019

Вы можете использовать np.where, что несколько похоже на case when из sql.

df['duration'] = np.where(df['duration'] == 0,1,df['duration'])

, которое читается как: Проверьте значение каждой строки df['duration'], если оно равно 0замените его на 1, в противном случае верните df['duration']

0 голосов
/ 09 ноября 2019

Вам не хватает inplace=True, которые по существу делают изменение постоянным.

Примечание: inplace=True возвращает None inplace=False возвращает копию объекта с выполненной операцией.

df_sorted = pd.DataFrame({'duration':[1,0,2,0],'Count':[23,23,2,1]})
df_sorted.replace({'duration': {0:1}}, inplace=True)
print(df_sorted)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...