Каков простой и прямой способ установить индекс каждой второй строки моего фрейма данных, скажем, «»? Метод, который я использовал, df.loc[1::2, 'index'] = ''
раньше работал, но больше не работает. Я использую Pandas версию 1.1.0.
Теперь выдает следующую ошибку:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
> lib/python3.6/site-packages/pandas/core/indexes/multi.py(1902)__getitem__()
Вот моя тестовая установка:
#!/usr/bin/python3
import pandas as pd
import numpy as np
df= pd.DataFrame(np.random.random(10), range(10), columns=['foo'])
df.index.name='bar'
, которая дает :
foo
bar
0 0.818489
1 0.525593
2 0.741739
3 0.250103
4 0.304080
5 0.206198
6 0.982070
7 0.476621
8 0.053609
9 0.726157
но следующее ничего не делает:
df.loc[1::2].index= ['']*len(df.loc[1::2].index)
т.е. результат по-прежнему
foo
bar
0 0.818489
1 0.525593
2 0.741739
3 0.250103
4 0.304080
5 0.206198
6 0.982070
7 0.476621
8 0.053609
9 0.726157
Почему это не работает?
Точно так же не работает:
df.index = df.index.to_numpy()
df.loc[1::2].index= ['']*len(df.loc[1::2].index)
Почему бы и нет?
(Усилия мотивированы тем, что выглядит для меня индекс - это не просто последовательность целых чисел (как раньше?)
df.index
Out[]: RangeIndex(start=0, stop=10, step=1, name='bar')
)
Это тоже не работает: df.loc[1::2,'bar']= ''
.
Следующее работает (в Pandas 1.0.4, но не в 1.1.0), но оно включает перемещение индекса в столбец. Конечно, в этом нет необходимости?
df.reset_index(inplace=True)
df.loc[1::2,'bar']= ''
df.set_index('bar', inplace=True)
который дает мне то, что я хочу, а именно:
foo
bar
0 0.653306
0.866628
2 0.356007
0.393833
4 0.770817
0.131656
6 0.314990
0.419762
8 0.944348
0.454487
Я ищу чистый, ясный и продуманный способ выполнить это простая модификация сопоставления значений индекса путем непосредственного воздействия на индекс.
(nb заголовок этого вопроса не идеален. Я не хочу использовать iloc
; я хочу обратиться к индексам определенных строк все на одно и то же значение. Возможно, проблема несколько более общая).