2Ob*_*Obe 2 python series pandas
我阅读了一个 excel 文件(> 15 MB)的几个工作表,其中每个工作表都有 > 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
Run Code Online (Sandbox Code Playgroud)
我使用的代码是:
inpath=r"P:\Data.xlsx"
df1=pd.DataFrame()
for i in ["67059070","67059075","67060055","Screwing Total"]:
df=pd.read_excel(io=inpath,header=0,sheetname="{0}".format(i))
df1["Gel.Menge"]=df["Gel.Menge"].where(df["Gel.Menge"]!=0).dropna()
print(np.round(df1.mode()))
print(np.round(df1.describe())
Run Code Online (Sandbox Code Playgroud)
不幸的是,这段代码非常慢......有没有更快的方法来完成这个?
从这里获取并修改的数据。
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
Run Code Online (Sandbox Code Playgroud)
选项1
boolean indexing
df[df['Gel.Menge'] != 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
Run Code Online (Sandbox Code Playgroud)
选项 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
Run Code Online (Sandbox Code Playgroud)
选项 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
Run Code Online (Sandbox Code Playgroud)
选项 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
Run Code Online (Sandbox Code Playgroud)
注:两个步骤是必要的query,并eval由于与处理列名的限制。
选项 5
astype(bool)
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
Run Code Online (Sandbox Code Playgroud)
表现
print(df.shape)
(110000, 3)
Run Code Online (Sandbox Code Playgroud)
100 loops, best of 3: 2.4 ms per loopRun Code Online (Sandbox Code Playgroud)
100 loops, best of 3: 2.36 ms per loopRun Code Online (Sandbox Code Playgroud)
100 loops, best of 3: 4.79 ms per loopRun Code Online (Sandbox Code Playgroud)
100 loops, best of 3: 4.97 ms per loopRun Code Online (Sandbox Code Playgroud)
100 loops, best of 3: 2.08 ms per loopRun Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4401 次 |
| 最近记录: |