Как реализовать условия во фрейме данных Panda, чтобы сохранить его

#python #pandas

#python #панды #pandas

Вопрос:

Я хотел бы создать счетчик для фрейма данных Panda для сохранения только до определенного значения в определенном столбце. например, сохранять только до тех пор, пока df[‘cycle’] == 2.

Из приведенных ниже ответов я понял, что df [df[‘cycle’]<=2] решит мою проблему.

Редактировать: Если я прав, python pandas всегда читает весь файл, только если нам больше, чем вы говорите, например, переходим к индексу x, но хотим, чтобы я использовал не индекс, а определенное значение из столбца. Как я могу это сделать?

Смотрите мой код ниже:

 import pandas as pd
import numpy as np

l = list(np.linspace(0,10,12))
data = [
        ('time',l),
         ('A',[0,5,0.6,-4.8,-0.3,4.9,0.2,-4.7,0.5,5,0.1,-4.6]),
         ('B',[ 0,300,20,-280,-25,290,30,-270,40,300,-10,-260]),
         ]
df = pd.DataFrame.from_dict(dict(data))
df['cycle'] = [df.index.get_loc(i) // 4   1 for i in  df.index]
df[df['cycle']<=2]
df.to_csv(path_or_buf='test.out', index=True, sep='t', columns=['time','A','B','cycle'], decimal='.')
  

Поэтому я изменил ответ в соответствии с предложением пользователей.

Я рад за любую помощь, которую я могу получить.

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

1. Какой ожидаемый результат? Вам нужен фильтр по df[df['cycle'] == 2] ?

2. @jezrael Я думаю, что он хочет df[df['cycle'] <= 2]

3. @Akhilesh — Не уверен, но если это какая-то комбинация со сбросом счетчика, не идея, поэтому commnet

4. Вы, вероятно, хотите df[df['cycle']<=2].to_csv(path_or_buf='test.out', index=True, sep='t', columns=['time','A','B','cycle'], decimal='.') . Публикую только в качестве комментария, потому что я не мог понять, что вы имеете в виду на Могу ли я сделать это без чтения всего фрейма данных, чтобы сэкономить мне немного времени и памяти?

5. Если вы загружаете файл из csv, вы можете использовать nrows как в read_csv('mydata.csv', nrows = cycle * 4) . Я предполагаю, что каждый цикл состоит из 4 строк, и если вы хотите загрузить 2 цикла, вам нужно будет загрузить 8 строк. Также df['cycle'] = (df.index.values // 4 1).tolist() немного короче.