【问题标题】:How to remove data from DataFrame permanently如何从 DataFrame 中永久删除数据
【发布时间】:2018-08-18 20:56:25
【问题描述】:

读取 CSV 数据文件后:

import pandas as pd  
df = pd.read_csv('data.csv')
print df.shape

我得到 99 行(索引)长的 DataFrame:

(99, 2)

为了清理 DataFrame,我继续应用 dropna() 方法,将其减少到 33 行:

df = df.dropna()
print df.shape

哪个打印:

(33, 2)

现在,当我迭代列时,它会打印出所有 99 行,就像它们没有被删除一样:

for index, value in df['column1'].iteritems():
    print index

这给了我这个:

0
1
2
.
.
.
97
98
99

看来dropna() 只是将数据“隐藏”了。当我迭代 DataFrame 时,隐藏的数据会返回。如何确保删除的数据从 DataFrame 中删除而不是被隐藏?

【问题讨论】:

  • 它保留了索引行标签,如果你想重置索引然后调用reset_index,你会发现你的索引在dropna之后缺少一些行值
  • 你摇滚!感谢您的提示!
  • 请将其作为答案发布,以便我们评分。
  • @EdChum 是的,请这样做。否则像我这样的笨蛋会去你的位置发帖,否认你应得的信誉。

标签: python pandas dataframe


【解决方案1】:

行标签已被保留,所以最后一行标签仍然是99,这让您感到困惑。

例子:

In [2]:
df = pd.DataFrame({'a':[0,1,np.NaN, np.NaN, 4]})
df

Out[2]:
    a
0   0
1   1
2 NaN
3 NaN
4   4

调用dropna后,索引行标签被保留:

In [3]:
df = df.dropna()
df

Out[3]:
   a
0  0
1  1
4  4

如果您想重置它们以使它们连续,请调用reset_index(drop=True) 分配新索引:

In [4]:
df = df.reset_index(drop=True)
df

Out[4]:
   a
0  0
1  1
2  4

【讨论】:

    【解决方案2】:

    或者你可以只调整参数,例如:

    Df =  df.dropna(inplace=True)
    

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 2017-10-21
      • 1970-01-01
      • 2013-11-07
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-20
      相关资源
      最近更新 更多