18

简而言之......我有一个 Python Pandas 数据框,它是使用“read_table”从 Excel 文件中读取的。我想从数据中保留一些系列,并清除其余部分。我知道我可以使用 'del data['SeriesName']' 一个一个地删除我不想要的内容,但我宁愿指定要保留的内容,而不是指定要删除的内容。

如果最简单的答案是将现有数据框复制到仅包含我想要的系列的新数据框中,然后完全删除现有框架,我会对该解决方案感到满意......但如果这确实是最好的方式,有人可以带我过去吗?

TIA ...我是熊猫的新手。:)

4

3 回答 3

37

您可以使用该DataFrame drop功能删除列。您必须传递axis=1选项才能使其在列而不是行上工作。请注意,它返回一个副本,因此您必须将结果分配给一个新的DataFrame

In [1]: from pandas import *

In [2]: df = DataFrame(dict(x=[0,0,1,0,1], y=[1,0,1,1,0], z=[0,0,1,0,1]))

In [3]: df
Out[3]:
   x  y  z
0  0  1  0
1  0  0  0
2  1  1  1
3  0  1  0
4  1  0  1

In [4]: df = df.drop(['x','y'], axis=1)

In [5]: df
Out[5]:
   z
0  0
1  0
2  1
3  0
4  1
于 2013-01-16T17:01:31.107 回答
15

与 Zelazny7 的回答基本相同——只需指定要保留的内容:

In [68]: df
Out[68]: 
   x  y  z
0  0  1  0
1  0  0  0
2  1  1  1
3  0  1  0
4  1  0  1

In [70]: df = df[['x','z']]                                                                

In [71]: df
Out[71]: 
   x  z
0  0  0
1  0  0
2  1  1
3  0  0
4  1  1

*编辑*

Dataframe.columns您可以通过对对象进行索引/切片来指定大量列。
这个对象type(pandas.Index)可以看作是一个dict列标签(具有一些扩展功能)。

请参阅上述示例的扩展:

In [4]: df.columns
Out[4]: Index([x, y, z], dtype=object)

In [5]: df[df.columns[1:]]
Out[5]: 
   y  z
0  1  0
1  0  0
2  1  1
3  1  0
4  0  1

In [7]: df.drop(df.columns[1:], axis=1)
Out[7]: 
   x
0  0
1  0
2  1
3  0
4  1
于 2013-01-16T17:03:39.730 回答
1

您还可以指定列列表以与 中的usecols选项保持一致pandas.read_table。这也加快了加载过程。

于 2017-06-16T15:21:14.740 回答