可以通过drop或del删除列
#+begin_src ipython :session alinbx :results output
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(12).reshape(3, 4),
columns=['A', 'B', 'C', 'D'])
print(df, '\n'+'--'*50)
# Drop columns
print(df.drop(['B', 'C'], axis=1), '\n'+'--'*50)
del df['A']
# Drop a row by index
print(df.drop([0, 1]), '\n'+'--'*50)
print(df.drop([0, 1], axis=0))
#+end_src
#+RESULTS:
#+begin_example
A B C D
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
----------------------------------------------------------------------------------------------------
A D
0 0 3
1 4 7
2 8 11
----------------------------------------------------------------------------------------------------
B C D
2 9 10 11
----------------------------------------------------------------------------------------------------
B C D
2 9 10 11
#+end_example
尝试删除带有del的rwo时,它将报告错误
#+begin_src ipython :session alinbx :results output
del df.iloc[0, :]
#+end_src
AttributeErrorTraceback (most recent call last)
<ipython-input-20-4fdbabf9cb4f> in <module>
----> 1 del df.iloc[0, :]
AttributeError: __delitem__
如何用'del'删除行
答案 0 :(得分:1)
您无法删除带有del
的行,因为.loc
或.iloc
返回的行是DataFrame的副本,因此删除它们将没有对您的实际数据有影响。
观察:
>>> df['A'] is df['A']
True
>>> df.loc[0] is df.loc[0]
False
>>> df.iloc[0, :] is df.loc[0, :]
False
del df['A']
之所以有效,是因为它使用__getitem__
来检索实际对象,因此通过删除键'A'
也将删除框架的关联列数据。
要删除行,您需要改为df.drop(index=0)
或df.drop([0], axis=0)
。要删除多行,假设您的索引为df.drop(index=range(...))
,int
也可以工作。