Невозможно отфильтровать строки в фреймах панды - PullRequest
0 голосов
/ 27 августа 2018

У меня есть фрейм данных, в котором столбец name имеет несколько значений.

Использование Counter() из collections:

Counter(df.name)

дает

Counter({'': 13460,
         'alpha': 986,
         'beta': 22480,
         'gamma': 123})

После этого:

df['name'] = df.loc[df['name'] != '']['name'].apply(lambda x: x + '-suffix')
Counter(df.name)

Я получаю:

Counter({nan: 13460,
         'alpha-suffix': 986,
         'beta-suffix': 22480,
         'gamma-suffix': 123})

Как выбрать все эти строки без пустой строки?

Ответы [ 2 ]

0 голосов
/ 27 августа 2018
df['name'] = df['name'].apply(lambda x: x + '-suffix' if x!='' else x)

Вы можете применить функцию к каждому с условием. Это даст вам правильное количество строк Это если вы хотите сохранить тот же набор данных. Иначе, вы все еще можете создать новый. Вы просто не можете использовать один и тот же номер с другим количеством строк.

temp_df = df['name'] != '']
0 голосов
/ 27 августа 2018

Вы не можете назначить обратно, потому что для несоответствующих значений получите NaN s:

df = pd.DataFrame({'name': ['','d','','d'], 'val': [10, 20,20,30]})
print(df)
  name  val
0        10
1    d   20
2        20
3    d   30

df['name'] = df.loc[df['name'] != '', 'name']
print(df)
  name  val
0  NaN   10
1    d   20
2  NaN   20
3    d   30

df['name'] = df.loc[df['name'] != '', 'name']
print(Counter(df.name))
Counter({nan: 2, 'd': 2})

s = df.loc[df['name'] != '', 'name']
print(Counter(s))
Counter({'d': 2})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...