在熊猫数据框中选择多个列

我在不同的列中有数据,但是我不知道如何提取数据以将其保存在另一个变量中。

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

如何选择'a''b'并将其保存到 df1?

我试过了

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

似乎没有任何工作。

答案

df1 = df[['a','b']]
df1 = df.iloc[:,0:2] # Remember that Python does not slice inclusive of the ending index.
df1 = df.iloc[0,0:2].copy() # To avoid the case where changing df1 also changes df
{df.columns.get_loc(c):c for idx, c in enumerate(df.columns)}
df.loc[:, 'C':'E']
df[['C', 'D', 'E']]  # or df.loc[:, ['C', 'D', 'E']]
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
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
...
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
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
...
newdf = df[df.columns[2:4]] # Remember, Python is 0-offset! The "3rd" entry is at slot 2.
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
columns = ['b', 'c']
df1 = pd.DataFrame(df, columns=columns)
colsToDrop = ['a']
df.drop(colsToDrop, axis=1)
# iloc[row slicing, column slicing]
surveys_df.iloc [0:3, 1:4]
dataframe[['column1','column2']]
dataframe[:,[1,2]]
dataframe[:,['column1','column2']]
import pandas as pd
    df = pd.DataFrame([[1, 2,5], [5,4, 5], [7,7, 8], [7,6,9]], 
                      index=['Jane', 'Peter','Alex','Ann'],
                      columns=['Test_1', 'Test_2', 'Test_3'])
Test_1  Test_2  Test_3
    Jane        1       2       5
    Peter       5       4       5
    Alex        7       7       8
    Ann         7       6       9
df[['Test_1','Test_3']]

           Test_1  Test_3
    Jane        1       5
    Peter       5       5
    Alex        7       8
    Ann         7       9
df.Test_2
Jane     2
    Peter    4
    Alex     7
    Ann      6
df.loc[:,'Test_1':'Test_3']
Test_1  Test_2  Test_3
     Jane        1       2       5
     Peter       5       4       5
     Alex        7       7       8
     Ann         7       6       9
df.loc[['Peter', 'Ann'],['Test_1','Test_3']]
Test_1  Test_3
    Peter       5       5
    Ann         7       9

从 0.21.0 开始,不建议将.loc[]与带有一个或多个缺少标签的列表一起使用,而建议使用.reindex 。因此,您的问题的答案是:

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

在以前的版本中,只要找到至少一个键,就可以使用.loc[list-of-labels] (否则将引发KeyError )。此行为已弃用,现在显示警告消息。推荐的替代方法是使用.reindex()

索引和选择数据中了解更多信息