来源:《利用Python进行数据分析·第2版》
丢弃某条轴上的一个或多个项很简单,只要有一个索引数组或列表即可。由于需要执行一些数据整理和集合逻辑,所以drop方法返回的是一个在指定轴上删除了指定值的新对象:
In [117]: obj
Out[117]:
a 0.0
b 1.0
c 2.0
d 3.0
e 4.0
dtype: float64
In [118]: new_obj = obj.drop("c")
In [119]: new_obj
Out[119]:
a 0.0
b 1.0
d 3.0
e 4.0
dtype: float64
In [120]: obj.drop(["c", "d"])
Out[120]:
a 0.0
b 1.0
e 4.0
dtype: float64
In [121]: obj
Out[121]:
a 0.0
b 1.0
c 2.0
d 3.0
e 4.0
dtype: float64
对于DataFrame,可以删除任意轴上的索引值。为了演示,先新建一个DataFrame例子:
In [122]: data = pd.DataFrame(np.arange(16).reshape((4, 4)),
...: index=['Ohio', 'Colorado', 'Utah', 'New York'],
...: columns=['one', 'two', 'three', 'four'])
In [123]: data
Out[123]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15
用标签序列调用drop会从行标签(axis 0)删除值:
In [123]: data
Out[123]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15
In [124]: data.drop(['Colorado', 'Ohio'])
Out[124]:
one two three four
Utah 8 9 10 11
New York 12 13 14 15
In [125]: data
Out[125]:
one two three four
Ohio 0 1 2 3
Colorado 4 5 6 7
Utah 8 9 10 11
New York 12 13 14 15
通过传递axis=1或axis='columns'可以删除列的值:
In [128]: data.drop('two', axis=1)
Out[128]:
one three four
Ohio 0 2 3
Colorado 4 6 7
Utah 8 10 11
New York 12 14 15
In [130]: data.drop(['two', 'four'], axis='columns')
Out[130]:
one three
Ohio 0 2
Colorado 4 6
Utah 8 10
New York 12 14
许多函数,如drop,会修改Series或DataFrame的大小或形状,可以就地修改对象,不会返回新的对象:
In [131]: obj.drop('c', inplace=True)
In [132]: obj
Out[132]:
a 0.0
b 1.0
d 3.0
e 4.0
dtype: float64
小心使用inplace,它会销毁所有被删除的数据。