2013-03-30 3 views
1

Я хочу удалить строки из нескольких фреймов данных, чтобы они были длиной n. Когда я пытался использовать -for-цикл, изменения не сохранялись бы через остальную часть скрипта.PANDAS: Обрезать несколько кадров данных

n = 50 
groups = [df1, df2, df3] 
for dataset in groups: 
    dataset = dataset[:n] 

Переосмысление имена по отдельности (например, df1 = df1 [: п]), работает, но то, что некоторые альтернативные способы? (Либо через python, либо pandas)

Что еще более важно, почему -for-loop здесь не работает?

панды == 0.10.1 питон == 2.7.3

+0

Я хотел бы изменить df1, df2 и df3, а не список «группы», как таковой. – beets

ответ

2

Это небольшое питона неправильное понимание, а не делать с пандами одной конкретной. :)

Вы переназначение переменного, используемые в итерации и не изменяя его в списке:

In [1]: L = [1, 2, 3] 

In [2]: for i in L: 
      i = i + 1 

In [3]: L 
Out[3]: [1, 2, 3] 

Вы действительно хотите изменить список:

In [4]: for i in range(len(L)): 
      L[i] = L[i] + 1 

In [5]: L 
Out[5]: [2, 3, 4] 

Или, возможно, в более хороший синтаксис использовать enumerate:

In [6]: for i, x in enumerate(L): 
      L[i] = x + 1  

In [7]: L 
Out[7]: [3, 4, 5] 

То есть:

for i, dataset in enumerate(groups): 
    groups[i] = dataset[:n] 
+0

Я тестировал это с помощью массивов numpy. Он изменил массивы в списке, не меняя базовые массивы, и это то, что я хочу сделать. – beets

+0

@beets Делает 'df1, df2, df3 = groups' достаточно для вас? Если у вас есть много других переменных или динамическое число, рассмотрите их хранение только в списке (или словаре). –

+0

Ага, вот и все. Благодаря! – beets

0

Ваш код создает (и отбрасывает) новую переменную dataset в цикле for.

Попробуйте это:

n = 50 
groups = [df1, df2, df3] 
for dataset in groups: 
    dataset[:] = dataset[:n] 
+0

Я проверил это с двумя массивами 5x1 с n = 2. Я получил сообщение об ошибке, «ValueError: операнды не могли быть переданы вместе с фигурами (5) (2)» – beets

1
n = 50 
groups = [df1, df2, df3] 
groups = [df.head(n) for df in groups] 

В Python, вы можете думать имен переменных, как указывающие на объекты. Заявление

groups = [df1, df2, df3] 

делает имя переменной, а groups, указывают на объект списка, который содержит 3 другие объекты.

for-loop:

for dataset in groups: 

создает новую переменную имя, dataset, который также указывает на объекты внутри groups, один в то время как итерацию Python через петлю.

Назначение

dataset = dataset[:n] 

перенаправляет имя переменной dataset, чтобы указать на новый объект, dataset[:n]. Но это назначение не влияет на groups. Это имя переменной все еще указывает на объект list, который содержит исходные DataFrames.

Повлиять groups, вам необходимо либо присвоить новое значение для groups с, как оператор присваивания, например

groups = ... 

или присвоить новое значение для одного из элементов в списке:

groups[i] = ... 
Смежные вопросы