условию - очистка данных python




Выбор нескольких столбцов в кадре данных pandas (8)

У меня есть данные в разных столбцах, но я не знаю, как их извлечь, чтобы сохранить их в другой переменной.

index  a   b   c
1      2   3   4
2      3   4   5

Как выбрать 'a' , 'b' и сохранить его в df1?

Я старался

df1 = df['a':'b']
df1 = df.ix[:, 'a':'b']

Кажется, что никто не работает.

(Незначительное редактирование)


Вы можете предоставить список столбцов, которые нужно удалить, и вернуть DataFrame только с необходимыми столбцами, используя функцию drop() в Pandas DataFrame.

Просто говорю

colsToDrop = ['a']
df.drop(colsToDrop, axis=1)

вернет DataFrame только с столбцами b и c .

Метод drop описан here .


Если вы хотите получить один элемент по строке index и имя столбца, вы можете сделать это так же, как df['b'][0] . Это так же просто, как вы можете изобразить.

Или вы можете использовать df.ix[0,'b'] , смешанное использование индекса и метки.

Примечание: Поскольку v0.20 ix устарел в пользу loc / iloc .


Начиная с 0.21.0, использование .loc или [] со списком с одним или несколькими отсутствующими метками, устарело, в пользу .reindex . Итак, ответ на ваш вопрос:

df1 = df.reindex(columns=['b','c'])

В предыдущих версиях использование .loc[list-of-labels] работало бы до тех пор, пока не было обнаружено хотя бы 1 из ключей (в противном случае это вызвало бы KeyError ). Это поведение устарело и теперь отображается предупреждающее сообщение. Рекомендуемая альтернатива - использовать .reindex() .

Подробнее https://pandas.pydata.org/pandas-docs/stable/indexing.html#reindexing на https://pandas.pydata.org/pandas-docs/stable/indexing.html#reindexing


Начиная с версии 0.11.0, столбцы можно нарезать так, как вы пытались с .loc индексатора .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 (обратите внимание, что в отличие от целочисленного разреза, в столбцы включается «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'] ; В противном случае.

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
...

Различные подходы, обсуждаемые в вышеприведенных ответах, основаны на предположении, что либо пользователь знает индексы столбцов, чтобы их отбрасывать, либо подмножество, или пользователь хочет подмножить фрейм данных с использованием диапазона столбцов (например, между «C»: «E») , pandas.DataFrame.drop () , безусловно, является возможностью подмножества данных на основе списка столбцов, определенных пользователем (хотя вы должны быть осторожны, что всегда используете копию данных и параметры места не должны быть установлены в True !!)

Другим вариантом является использование 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)

Выходной сигнал будет следующим: bc 1 3 4 2 4 5


Я нашел этот метод очень полезным:

# iloc[row slicing, column slicing]
surveys_df.iloc [0:3, 1:4]

Более подробную информацию можно найти here


Я совершенно уверен, что это не оптимизированный подход, но можно рассматривать как другой.

использование итераций

`df1= pd.DataFrame() #creating an empty dataframe
 for index,i in df.iterrows():
 df1.loc[index,'A']=df.loc[index,'A']
 df1.loc[index,'B']=df.loc[index,'B']
 df1.head()

просто используйте: он выберет столбцы b и c.

df1=pd.DataFrame()
df1=df[['b','c']]

то u может просто вызвать df1:

df1




select