从Pandas系列中删除零的最快方法

2024-09-29 22:11:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我读了几个excel文件的工作表(大于15mb),其中每个工作表有超过10000列。第二,我选择一列(只包含整数),从该列中删除所有值==0,并将此列写入新的df2。另外,我计算了描述性统计。在

数据如下:

    Gel.Menge   Erf.datum      Freig.
0         0.0  26.11.2014  26.11.2014
1        10.0  06.11.2014  07.11.2014
2         5.0  19.12.2014  08.01.2015
3         7.0  07.07.2015  17.07.2015
4         0.0  21.07.2015  22.07.2015
5         5.0  18.03.2016  22.03.2016
6        10.0  29.03.2016  31.03.2016
7         0.0  20.07.2016  21.07.2016
8        20.0  13.10.2016  17.10.2016
9         0.0  01.12.2014  01.12.2014
10        0.0  20.04.2015  20.04.2015

我使用的代码是:

^{pr2}$

不幸的是这段代码太慢了。。。 有没有更快的方法来实现这个目标?在


Tags: 文件数据方法代码目标整数exceldf2
1条回答
网友
1楼 · 发布于 2024-09-29 22:11:28

here获取并修改的数据。在

df

    Gel.Menge   Erf.datum      Freig.
0         0.0  26.11.2014  26.11.2014
1        10.0  06.11.2014  07.11.2014
2         5.0  19.12.2014  08.01.2015
3         7.0  07.07.2015  17.07.2015
4         0.0  21.07.2015  22.07.2015
5         5.0  18.03.2016  22.03.2016
6        10.0  29.03.2016  31.03.2016
7         0.0  20.07.2016  21.07.2016
8        20.0  13.10.2016  17.10.2016
9         0.0  01.12.2014  01.12.2014
10        0.0  20.04.2015  20.04.2015

选项1
boolean indexing

^{pr2}$

选项2
np.where

m = np.where(df['Gel.Menge'], True, False)
m
array([False,  True,  True,  True, False,  True,  True, False,  True,
       False, False], dtype=bool)

df[m]

   Gel.Menge   Erf.datum      Freig.
1       10.0  06.11.2014  07.11.2014
2        5.0  19.12.2014  08.01.2015
3        7.0  07.07.2015  17.07.2015
5        5.0  18.03.2016  22.03.2016
6       10.0  29.03.2016  31.03.2016
8       20.0  13.10.2016  17.10.2016

选项3
df.query

c = df['Gel.Menge'] 
df.query('@c != 0')

   Gel.Menge   Erf.datum      Freig.
1       10.0  06.11.2014  07.11.2014
2        5.0  19.12.2014  08.01.2015
3        7.0  07.07.2015  17.07.2015
5        5.0  18.03.2016  22.03.2016
6       10.0  29.03.2016  31.03.2016
8       20.0  13.10.2016  17.10.2016

选项4
df.eval

df[df.eval('@c != 0')]

   Gel.Menge   Erf.datum      Freig.
1       10.0  06.11.2014  07.11.2014
2        5.0  19.12.2014  08.01.2015
3        7.0  07.07.2015  17.07.2015
5        5.0  18.03.2016  22.03.2016
6       10.0  29.03.2016  31.03.2016
8       20.0  13.10.2016  17.10.2016

注意:由于处理列名的限制,queryeval需要两个步骤。在


选项5
^{}

df[df['Gel.Menge'].astype(bool)]

   Gel.Menge   Erf.datum      Freig.
1       10.0  06.11.2014  07.11.2014
2        5.0  19.12.2014  08.01.2015
3        7.0  07.07.2015  17.07.2015
5        5.0  18.03.2016  22.03.2016
6       10.0  29.03.2016  31.03.2016
8       20.0  13.10.2016  17.10.2016

性能

print(df.shape)
(110000, 3)
100 loops, best of 3: 2.4 ms per loop
100 loops, best of 3: 2.36 ms per loop
100 loops, best of 3: 4.79 ms per loop
100 loops, best of 3: 4.97 ms per loop
100 loops, best of 3: 2.08 ms per loop

相关问题 更多 >

    热门问题