Удалить некоторые элементы из фрейма данных Python Pandas - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть лист Excel с 20000row и 5 столбцами.Этот фрейм данных содержит несколько значений -9.Я хочу удалить эти -9 без замены какого-либо другого значения на их месте.

Ниже приведен пример фрейма данных:

a   b   c
1   3   -9
-9   2   8
5   -9   -9
-9   0   2

Мне нужен фрейм данных, который выглядит следующим образом:

a b c 1 3 2 8 5 0 2

Следующее является частью выходного файла: 23799 1 11 1.000000 0.1 0.133 1 0.867 0.5 0 23800 2 2 0.100000 0.1 0.133 1 0.867 0.5 0 11 0.900000 0.1 0.133 1 0.867 0.5 0 23801 2 2 0.200000 0.1 0.133 1 0.867 0.5 0 11 0.800000 0.1 0.133 1 0.867 0.5 0 23802 2 2 0.200000 0.1 0.133 1 0.867 0.5 0 11 0.800000 0.1 0.133 1 0.867 0.5 0 23803 3 2 0.600000 0.1 0.133 1 0.867 0.5 0 10 0.100000 0.1 0.173 1 0.827 0.5 0 11 0.300000 0.1 0.133 1 0.867 0.5 0 23804 2 2 0.400000 0.1 0.133 1 0.867 0.5 0 11 0.600000 0.1 0.133 1 0.867 0.5 0 23805 2 2 0.500000 0.1 0.133 1 0.867 0.5 0 11 0.500000 0.1 0.133 1 0.867 0.5 0 23806 3 5 0.100000 0.1 0.1 1 0.9 0.5 0 9 0.400000 0.1 0.089 1 0.889 0.5 0.022 11 0.500000 0.1 0.133 1 0.867 0.5 0 23807 2 5 0.400000 0.1 0.1 1 0.9 0.5 0 9 0.600000 0.1 0.089 1 0.889 0.5 0.022 23808 2 5 0.200000 0.1 0.1 1 0.9 0.5 0 9 0.800000 0.1 0.089 1 0.889 0.5 0.022

Ответы [ 3 ]

0 голосов
/ 13 февраля 2019

Судя по комментариям к ответу @ jezrael, вы хотите экспортировать результат в виде текстового файла (например, csv или tsv).Поскольку вы не собираетесь работать с кадром данных в пандах, я бы использовал простой replace.

df = pd.DataFrame(
    [[1, 3, -9], [-9, 2, 8], [5, -9, -9], [-9, 0, 2]],
    columns=("a", "b", "c"),
)
df.replace(to_replace=-9, value='')
  .to_csv('/tmp/foo.csv', index=False)

Экспортированный CSV выглядит следующим образом:

a,b,c
1,3,
,2,8
5,,
,0,2
0 голосов
/ 13 февраля 2019

Другой способ сделать это с помощью логического индексирования:

Пример DataFrame:

>>> df
   a  b  c
0  1  3 -9
1 -9  2  8
2  5 -9 -9
3 -9  0  2

Результат:

>>> df[df < 0] = ''
>>> df
   a  b  c
0  1  3
1     2  8
2  5
3     0  2

Во-вторых, поскольку другие уже включали заменуМетод, однако я хотел бы добавить дополнительные для достижения желаемого, сначала преобразовать ваше отрицательное число в Nan и в то же время заполнить значения Nan с '', чтобы получить желаемый:

Результирующий вывод:

>>> df.replace(-9, np.nan).fillna('')
   a  b  c
0  1  3
1     2  8
2  5
3     0  2
0 голосов
/ 13 февраля 2019

Полагаю, вам нужны все строки хотя бы с одним значением -9 - фильтр по boolean indexing:

df = df[df.ne(-9).all(axis=1)]
print (df)
   a  b
0  1  3

Detail :

Проверьте, не равны ли значения -9:

print (df.ne(-9))
       a      b
0   True   True
1  False   True
2   True  False
3  False  False

Проверьте, все ли значения в рядах:

print (df.ne(-9).all(axis=1))
0     True
1    False
2    False
3    False
dtype: bool

Заменить на ничего невозможно, нужно заменить на 0 или NaN или какое-либо значение:

print (df.replace(-9, np.nan))
     a    b
0  1.0  3.0
1  NaN  2.0
2  5.0  NaN
3  NaN  NaN

Только метод изменяет форму - создайте 2 столбца со всеми цифрами в одном столбце с помощью melt:

df1 = df.melt(var_name='A', value_name='B')
df1 = df1[df1['B'] != -9]
print (df1)
    A  B
0   a  1
2   a  5
4   b  3
5   b  2
7   b  0
9   c  8
11  c  2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...