Одна возможность:
myArray = myArray.filter(function( obj ) {
return obj.field !== 'money';
});
Обратите внимание, что filter
создает новый массив. Любые другие переменные, относящиеся к исходному массиву, не будут получать отфильтрованные данные, хотя вы обновляете исходную переменную myArray
с помощью новой ссылки. Используйте с осторожностью.
Имена столбцов (которые являются строками) не могут быть нарезаны так, как вы пытались.
Здесь у вас есть несколько вариантов. Если вы знаете из контекста, какие переменные вы хотите вырезать, вы можете просто вернуть представление только этих столбцов, передав список в синтаксис __getitem__
([]].
df1 = df[['a','b']]
В качестве альтернативы, если важно индексировать их численно, а не их именем (скажем, ваш код должен автоматически сделать это, не зная имена первых двух столбцов), вы можете сделать это вместо этого:
df1 = df.iloc[:,0:2] # Remember that Python does not slice inclusive of the ending index.
Кроме того, вы должны ознакомиться с идеей представления объекта Pandas против копии этого объекта. Первый из вышеперечисленных методов вернет новую копию в память желаемого субобъекта (нужные фрагменты).
Иногда, однако, в Pandas существуют соглашения об индексировании, которые не делают этого и вместо этого дают вам новую переменную, которая относится только к той же части памяти, что и субобъект или фрагмент исходного объекта , Это произойдет со вторым способом индексирования, поэтому вы можете изменить его с помощью функции copy()
, чтобы получить обычную копию. Когда это происходит, изменение того, что вы думаете, нарезанный объект, может иногда изменять исходный объект. Всегда хорошо смотреть на это.
df1 = df.iloc[0,0:2].copy() # To avoid the case where changing df1 also changes df
просто используйте: он выберет столбец b и c.
df1=pd.DataFrame()
df1=df[['b','c']]
, тогда u может просто вызвать df1:
df1
Вы можете предоставить список столбцов, которые нужно удалить, и вернуть обратно DataFrame с помощью только столбцов, необходимых с помощью функции drop()
в Pandas DataFrame.
Просто говоря
colsToDrop = ['a']
df.drop(colsToDrop, axis=1)
вернет DataFrame только с столбцами b
и c
.
Метод drop
зарегистрирован здесь здесь .
Предполагая, что ваши имена столбцов (df.columns
) равны ['index','a','b','c']
, тогда нужные вам данные находятся в 3-м & amp; 4-я колонны. Если вы не знаете их имена при запуске вашего скрипта, вы можете это сделать
newdf = df[df.columns[2:4]] # Remember, Python is 0-offset! The "3rd" entry is at slot 2.
. Поскольку EMS указывает в свой ответ , df.ix
нарезает столбцы немного больше лаконично, но интерфейс среза .columns
может быть более естественным, поскольку он использует синтаксис индексирования / разрезания ванильного 1-D-файла python.
WARN: 'index'
является плохим именем для столбца DataFrame
, Эта же метка также используется для реального атрибута df.index
, массива Index
. Поэтому ваш столбец возвращается df['index']
, а реальный индекс DataFrame возвращается df.index
. Index
- это особый тип Series
, оптимизированный для поиска значений его элементов. Для df.index это поиск строк по их метке. Этот атрибут df.columns
также является массивом pd.Index
для поиска столбцов по их меткам.
.ix
является not i> только для строк. Он предназначен для нарезки общего назначения и может использоваться для многомерного нарезки. Это в основном просто интерфейс для обычного синтаксиса __getitem__
NumPy. Тем не менее, вы можете легко преобразовать проблему разрезания столбцов в проблему нарезания строк, просто применив операцию транспонирования df.T
. В вашем примере используется columns[1:3]
, что немного вводит в заблуждение. Результатом columns
является Series
; будьте осторожны, чтобы не рассматривать его как массив. Кроме того, вы, вероятно, должны изменить его как columns[2:3]
, чтобы соответствовать вашим «третьим и амперным»; 4-е & Quot; комментарий.
– ely
31 October 2012 в 21:11
[2:4]
верен. Ваш [2:3]
неверен. И используя стандартную нотацию для нарезки питона для генерации последовательности / Серии, не вводит в заблуждение IMO. Но мне нравится ваш обход интерфейса DataFrame для доступа к базовому массиву numpy с помощью ix
.
– hobs
4 February 2016 в 18:26
df.columns
и хотите разрезать его на метку i>, тогда у вас будет другая семантика семпла, чем если бы вы нарезали ее на целую позицию индекса i>. Я определенно не объяснил это хорошо в своем предыдущем комментарии.
– ely
4 February 2016 в 19:05
Различные подходы, обсуждаемые в вышеприведенных ответах, основаны на предположении, что либо пользователь знает индексы столбцов, чтобы их отбрасывать, либо подмножество, или пользователь хочет подмножить фрейм данных с использованием диапазона столбцов (например, между 'C': ' E '). pandas.DataFrame.drop (), безусловно, является возможностью подмножества данных на основе списка столбцов, определенных пользователем (хотя вы должны быть осторожны, чтобы всегда использовать копию данных и параметры inplace не должны быть True !!) [/ g2]
Другой вариант - использовать pandas.columns.difference (), который задает разницу в именах столбцов и возвращает индексный тип массива, содержащий требуемые столбцы. Ниже приведено решение:
df = pd.DataFrame([[2,3,4],[3,4,5]],columns=['a','b','c'],index=[1,2])
columns_for_differencing = ['a']
df1 = df.copy()[df.columns.difference(columns_for_differencing)]
print(df1)
Выход будет:
b c
1 3 4
2 4 5
df1 = df[df.columns.difference(columns_for_differencing)]
вернет новый / скопированный фрейм. Вы сможете изменить df1
без изменения df
. Спасибо, кстати. Это было именно то, что мне нужно.
– Bazyli Debowski
8 August 2018 в 17:20
Если вы хотите получить один элемент по имени строки и столбцу, вы можете сделать это так же, как df['b'][0]
. Это так же просто, как вы можете изобразить.
Или вы можете использовать df.ix[0,'b']
, смешанное использование индекса и метки.
Примечание: Поскольку v0.20 ix
устарел в пользу loc
/ iloc
.
Я нашел этот метод очень полезным:
# iloc[row slicing, column slicing]
surveys_df.iloc [0:3, 1:4]
Более подробную информацию можно найти здесь здесь
Начиная с версии 0.11.0, столбцы могут быть отрезаны так, как вы пытались использовать индекс .loc
:
df.loc[:, 'C':'E']
возвращает столбцы C
через E
.
Демонстрация на случайно сгенерированном DataFrame:
import pandas as pd
import numpy as np
np.random.seed(5)
df = pd.DataFrame(np.random.randint(100, size=(100, 6)),
columns=list('ABCDEF'),
index=['R{}'.format(i) for i in range(100)])
df.head()
Out:
A B C D E F
R0 99 78 61 16 73 8
R1 62 27 30 80 7 76
R2 15 53 80 27 44 77
R3 75 65 47 30 84 86
R4 18 9 41 62 1 82
Чтобы получить столбцы от C до E (обратите внимание, что в отличие от integer slicing, «E» включен в столбцы):
df.loc[:, 'C':'E']
Out:
C D E
R0 61 16 73
R1 30 80 7
R2 80 27 44
R3 47 30 84
R4 41 62 1
R5 5 58 0
...
То же самое работает для выбора строк на основе меток. Получить строки «R6» в «R10» из этих столбцов:
df.loc['R6':'R10', 'C':'E']
Out:
C D E
R6 51 27 31
R7 83 19 18
R8 11 67 65
R9 78 27 29
R10 7 16 94
.loc
также принимает логический массив, поэтому вы можете выбрать столбцы, соответствующая запись в массиве True
. Например, df.columns.isin(list('BCD'))
возвращает array([False, True, True, True, False, False], dtype=bool)
- Истинно, если имя столбца находится в списке ['B', 'C', 'D']
; False, в противном случае.
df.loc[:, df.columns.isin(list('BCD'))]
Out:
B C D
R0 78 61 16
R1 27 30 80
R2 53 80 27
R3 65 47 30
R4 9 41 62
R5 78 5 58
...
In [39]: df
Out[39]:
index a b c
0 1 2 3 4
1 2 3 4 5
In [40]: df1 = df[['b', 'c']]
In [41]: df1
Out[41]:
b c
0 3 4
1 4 5
df[['b as foo', 'c as bar']
, чтобы выход переименовал столбец b
в качестве foo
и столбец c
как bar
?
– kuanb
14 February 2017 в 21:30
Я понимаю, что этот вопрос довольно старый, но в последней версии панд есть простой способ сделать именно это. Имена столбцов (которые являются строками) можно нарезать любым способом.
columns = ['b', 'c']
df1 = pd.DataFrame(df, columns=columns)
df[['a','b']]
создает копию – Wes McKinney 8 July 2012 в 18:54ix[]
, если вы предпочитаете i> использовать по умолчаниюix[]
. – ely 8 July 2012 в 19:09ix
принимает аргументы среза, поэтому вы также можете получить столбцы. Например,df.ix[0:2, 0:2]
получает верхний левый 2x2 суб-массив так же, как и для матрицы NumPy (в зависимости от ваших имен столбцов, конечно). Вы даже можете использовать синтаксис среза для строковых имен столбцов, напримерdf.ix[0, 'Col1':'Col5']
. Это получает все столбцы, которые должны быть упорядочены междуCol1
иCol5
в массивеdf.columns
. Неверно сказать, чтоix
индексирует строки. Это просто его самое основное использование. Он также поддерживает гораздо больше индексирования. Итак,ix
совершенно общий для этого вопроса. – ely 31 October 2012 в 21:02ix
. – hobs 31 October 2012 в 21:33.iloc
, который исключает последнюю позицию, как и списки Python. – Ted Petrou 1 July 2017 в 13:55