如何从df中选择列a和b,并将它们保存到新的数据帧df1中?

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

尝试失败:

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

当前回答

如果要按行索引和列名获取一个元素,可以像df['b'][0]一样执行。这就像你能想象的那样简单。

或者可以使用df.ix[0,'b']-索引和标签的混合用法。

注意:从v0.20开始,ix已被弃用,取而代之的是loc/iloc。

其他回答

我发现这种方法非常有用:

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

更多详情请点击此处。

在最新版本的Pandas中,有一种简单的方法可以做到这一点。列名(字符串)可以按您喜欢的方式进行切片。

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

您可以提供要删除的列的列表,并使用Pandas DataFrame上的drop()函数仅返回所需的列。

只是说说而已

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

将返回仅包含列b和c的DataFrame。

此处记录了drop方法。

也可以使用df.pop():

>>> df = pd.DataFrame([('falcon', 'bird',    389.0),
...                    ('parrot', 'bird',     24.0),
...                    ('lion',   'mammal',   80.5),
...                    ('monkey', 'mammal', np.nan)],
...                   columns=('name', 'class', 'max_speed'))
>>> df
     name   class  max_speed
0  falcon    bird      389.0
1  parrot    bird       24.0
2    lion  mammal       80.5
3  monkey  mammal

>>> df.pop('class')
0      bird
1      bird
2    mammal
3    mammal
Name: class, dtype: object

>>> df
     name  max_speed
0  falcon      389.0
1  parrot       24.0
2    lion       80.5
3  monkey        NaN

请使用df.pop(c)。

从0.21.0开始,在列表中使用.loc或[](其中包含一个或多个缺失的标签)是不推荐使用.reindex的。因此,问题的答案是:

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

在以前的版本中,只要找到至少一个键,就可以使用.loc〔标签列表〕(否则会引发KeyError)。此行为已弃用,现在显示警告消息。建议使用.reindex()。

阅读更多关于索引和选择数据的信息。