18
Фев
2018

Удалить строки в DataFrame удовлетворяющие условию

Как удалить строки в Pandas DataFrame, в которых значения в столбце STP == 1005092?

Подробно:

Я занимаюсь обработкой данных в Jupyter notebook: нормальное распределение, спектрограммы, гистограммы и тп. У меня есть 1500 тысячи проиндексированных массивов внутри одного файла (Индекс ''STP''). Есть 2 массива которые не подходят по показаниям (явно выделяются из остальных 1498 значений), но проходят тест на нормальное распределение, из-за чего не фильтруются программой. Я пробовал команды data.STP.remove(1005072), где семизначное число - это индекс массива, но все тщетно.

Код:

cols = ['ttt','IK05','IK06','IK07','IK08','IK10','IK11','IK14','IK16','IK20','DA05','DA06','DA07','DA08','DA10','DA11','DA14','DA16', 'DA20',
'GZ1','GZ2','GZ3','GZ4', 'LLS', 'LLD', 'STP']

def lasread (fname):
    data = pd.read_table(fname, delim_whitespace = True,na_values = '-999.25', index_col=False)
    return data[cols]

data = None

for name in las: 
    print(name)
    if data is None:
        data = lasread (name)
    else:
        data = pd.concat([data, lasread (name)])

ndata = data.STP.as_matrix(columns=None)

df = data[cols]

df1 = df.groupby('STP')
df1.head()
dfp  = pd.DataFrame()


for name, group in df1:
     k,p=stats.mstats.normaltest(group[5:-5])
     dfp[name] = p

d=dfp.transpose()
d.columns = cols
goodindex = d[d.IK20>0.05][d.DA20>0.05].index - отбраковка по СКО
**data.STP.remove(1005072)**

filtereddata = data[cols][data.STP == -39]

for f in goodindex:
     a = data[cols][data.STP == f]
     filtereddata = pd.concat([filtereddata, a])
print(filtereddata)

Источник: https://ru.stackoverflow.com/questions/786730/%D0%A3%D0%B4%D0%B0%D0%BB%D0%B8%D1%82%D1%8C-%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8-%D0%B2-dataframe-%D1%83%D0%B4%D0%BE%D0%B2%D0%BB%D0%B5%D1%82%D0%B2%D0%BE%D1%80%D1%8F%D1%8E%D1%89%D0%B8%D0%B5-%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D1%8E

Тебе может это понравится...

Добавить комментарий