我有一个数据帧df:
>>> df
sales discount net_sales cogs
STK_ID RPT_Date
600141 20060331 2.709 NaN 2.709 2.245
20060630 6.590 NaN 6.590 5.291
20060930 10.103 NaN 10.103 7.981
20061231 15.915 NaN 15.915 12.686
20070331 3.196 NaN 3.196 2.710
20070630 7.907 NaN 7.907 6.459
然后我想删除在列表中指示的具有特定序列号的行,假设这里是[1,2,4],
,然后是left:
sales discount net_sales cogs
STK_ID RPT_Date
600141 20060331 2.709 NaN 2.709 2.245
20061231 15.915 NaN 15.915 12.686
20070630 7.907 NaN 7.907 6.459
如何或什么函数可以做到这一点?
发布于 2013-02-02 20:11:11
使用DataFrame.drop并向其传递一系列索引标签:
In [65]: df
Out[65]:
one two
one 1 4
two 2 3
three 3 2
four 4 1
In [66]: df.drop(df.index[[1,3]])
Out[66]:
one two
one 1 4
three 3 2
发布于 2016-01-05 22:28:26
请注意,当您想要插入行时,使用"inplace“命令可能很重要。
df.drop(df.index[[1,3]], inplace=True)
因为您的原始问题没有返回任何内容,所以应该使用此命令。http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.drop.html
发布于 2017-04-15 09:57:42
如果DataFrame很大,而且要删除的行数也很大,那么简单的drop by index df.drop(df.index[])
就会花费太多时间。
在我的例子中,我使用100M rows x 3 cols
创建了一个浮点数的多索引DataFrame,并且我需要从其中删除10k
行。我发现的最快的方法是,与直觉相反的是,对其余的行执行take
。
假设indexes_to_drop
是要删除的位置索引的数组(在问题中为[1, 2, 4]
)。
indexes_to_keep = set(range(df.shape[0])) - set(indexes_to_drop)
df_sliced = df.take(list(indexes_to_keep))
在我的例子中,这占用了20.5s
,而简单的df.drop
占用了5min 27s
并消耗了大量内存。生成的DataFrame是相同的。
https://stackoverflow.com/questions/14661701
复制相似问题