为什么使用df.drop删除列会丢弃整个数据帧?

时间:2017-09-27 16:50:24

标签: python pandas dataframe

关注此post后,我尝试将其从数据框中删除两列:

import pandas as pd
from io import StringIO

A_csv = """cases,population,country,year,type,count
745,19987071,Afghanistan,1999,population,19987071
2666,20595360,Afghanistan,2000,population,20595360
37737,172006362,Brazil,1999,population,172006362
80488,174504898,Brazil,2000,population,174504898
212258,1272915272,China,1999,population,1272915272
213766,1280428583,China,2000,population,1280428583"""

with StringIO(A_csv) as fp:
    A = pd.read_csv(fp)
print(A)
print()
dropcols = ["type", "count"]

A = A.drop(dropcols, axis = 1, inplace = True)
print(A)

结果

      cases  population      country  year        type       count
0     745    19987071  Afghanistan  1999  population    19987071
1    2666    20595360  Afghanistan  2000  population    20595360
2   37737   172006362       Brazil  1999  population   172006362
3   80488   174504898       Brazil  2000  population   174504898
4  212258  1272915272        China  1999  population  1272915272
5  213766  1280428583        China  2000  population  1280428583

None

有什么东西可以逃避我吗?

1 个答案:

答案 0 :(得分:2)

评论中提到了这些解决方案。我只是在这篇文章中充实它们。

使用drop时,请注意您拥有的两个选项。

其中一个是放弃inplace。完成此操作后,将对数据框进行操作,并对原始进行更改。这意味着这就足够了。

A.drop(dropcols, axis=1, inplace=1)

A
    cases  population      country  year
0     745    19987071  Afghanistan  1999
1    2666    20595360  Afghanistan  2000
2   37737   172006362       Brazil  1999
3   80488   174504898       Brazil  2000
4  212258  1272915272        China  1999
5  213766  1280428583        China  2000

df.drop documentation指定:

  

inplacebool,默认False

     

如果True,请在此处进行操作并返回无。

请注意,当在地方调用drop时,它会返回None(这是任何不返回值的函数的默认值),并且A已经更新

另一种选择是删除,但返回一份副本。这意味着原件未被修改。所以,你现在可以做到:

B = A.drop(dropcols, axis=1)

B    
    cases  population      country  year
0     745    19987071  Afghanistan  1999
1    2666    20595360  Afghanistan  2000
2   37737   172006362       Brazil  1999
3   80488   174504898       Brazil  2000
4  212258  1272915272        China  1999
5  213766  1280428583        China  2000

A
    cases  population      country  year        type       count
0     745    19987071  Afghanistan  1999  population    19987071
1    2666    20595360  Afghanistan  2000  population    20595360
2   37737   172006362       Brazil  1999  population   172006362
3   80488   174504898       Brazil  2000  population   174504898
4  212258  1272915272        China  1999  population  1272915272
5  213766  1280428583        China  2000  population  1280428583

BA分别存在的位置。

请注意,您没有保存使用inplace的任何内存 - 两种方法都会创建副本。但是,在前一种情况下,在场景后面进行复制,并将更改添加回原始对象。