замена значений на NAN

#python #dataframe #nan

#python #фрейм данных #nan

Вопрос:

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

 [index, Data]
[1, [5,3,6,8,4,5,7etc]]
  

Данные в моем столбце «данные» остаются в массиве. Мне нужно иметь не менее 75 значений в каждом массиве. Фрейм данных имеет длину 438 строк.
Мне нужно создать фильтр, в котором все массивы, содержащие менее 75 значений, будут заменены на NaN.

Я подумал о чем-то подобном:

 for i in range(len(df_window)):
if len(df_window['Data'][i][0])<75:
  

Я не знаю, правильно ли это и как продолжить. Фрейм данных называется df_window

может кто-нибудь мне быстро помочь, пожалуйста?

Комментарии:

1. Зачем вам NaN? Вы уверены, что None не будет лучше? Или, может быть, полностью удалить эти строки из данных?

2. Причина, по которой я хочу получить NaN, заключается в том, что я хочу впоследствии удалить эти строки. Но у меня есть два разных фрейма данных, где эти строки NaN должны быть удалены, если вы понимаете, что я имею в виду. Потому что после всей этой фильтрации я хочу сравнить эти два фрейма данных друг с другом, поэтому расположение двух должно быть одинаковым

3. Если я вас понимаю, у вас есть 2 фрейма данных, каждый из которых содержит 438 строк, и вы хотите выполнить сравнение строк по строкам. В этом случае может иметь смысл иметь проверку на длину> 75 как часть любой функции сравнения, поскольку вам все равно нужно будет проверять наличие NAN в функции сравнения.

4. да, действительно. Итак, в конце сценария я хочу разделить эти два фрейма данных друг на друга. Но чтобы сделать это, я должен сделать фреймы данных точно такими же. массивы с менее чем 75 значениями могут рассматриваться как «манипулируемые» и должны быть удалены. Таким образом, эта строка должна быть удалена в обоих кадрах. Для этого мне нужно сделать длину каждой строки одинаковой для обоих фреймов, посмотрев, у какого из двух меньше значений, а у другого столько же значений. Вы можете помочь?

Ответ №1:

Вы можете использовать lengths = df_window['Data'].apply(len) для получения последовательности длин массива. Затем, используя df_window.loc[(lengths < 75), 'Data'] = np.nan , вы должны получить то, что хотите.

РЕДАКТИРОВАТЬ: исправлена первая строка.

Комментарии:

1. Поскольку это список в одной ячейке, вывод .apply(len) равен 1 для каждой строки, так что это не работает. Поэтому я должен найти другое решение для этого. То, что я сделал выше в цикле for, дает мне длины массивов. Единственное, что я не знаю, как потом заменить его на nan

2. О да, действительно, тогда используйте lengths = df_window[‘Data’].apply(len) .

3. это сработало, спасибо! Вы также знаете, как я должен сделать следующее: мне нужно посмотреть, есть ли разница между обоими массивами. так, например, в df1 массив в строке 1 имеет 80 значений, а в df2 в той же строке 78 значений. Поэтому мне нужно искать каждую строку, в которой массив df имеет наименьшие значения, и мне нужно сделать их одинаковыми. Итак, я думаю (если у меня 78 и 80), мне нужно сделать значение с 80 также 78, выбрав в этом случае последние 78 значений. Я должен сделать это для каждой строки

4. Привет! Ну да, вы можете сделать так jovian.ai/dev-perrier-remi/so-replace-by-nan Я сделал заметку, что так было проще. Замените 0 на имя вашего столбца, и все будет хорошо. Однако это немного медленно, вы хотите избежать цикла for в dataframe, но все должно быть в порядке.