#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()
немного короче.