Pandas: PERF: impor panda terlalu lambat

Dibuat pada 30 Mei 2014  ·  48Komentar  ·  Sumber: pandas-dev/pandas

Tes berikut menunjukkan masalah... isi testme.py secara harfiah import pandas ; namun, dibutuhkan hampir 6 detik untuk mengimpor panda di Lenovo T60 saya.

[mpenning<strong i="8">@Mudslide</strong> panex]$ time python testme.py 

real    0m5.759s
user    0m5.612s
sys 0m0.120s
[mpenning<strong i="9">@Mudslide</strong> panex]$
[mpenning<strong i="10">@Mudslide</strong> panex]$ uname -a
Linux Mudslide 3.2.0-4-686-pae #1 SMP Debian 3.2.57-3+deb7u1 i686 GNU/Linux
[mpenning<strong i="11">@Mudslide</strong> panex]$ python -V
Python 2.7.3
[mpenning<strong i="12">@Mudslide</strong> panex]$
[mpenning<strong i="13">@Mudslide</strong> panex]$ pip freeze
Babel==1.3
Cython==0.20.1
Flask==0.10.1
Flask-Babel==0.8
Flask-Login==0.2.7
Flask-Mail==0.7.6
Flask-OpenID==1.1.1
Flask-SQLAlchemy==0.16
Flask-WTF==0.8.4
Flask-WhooshAlchemy==0.54a
Jinja2==2.7.1
MarkupSafe==0.18
Pygments==1.6
SQLAlchemy==0.7.9
Sphinx==1.2.2
Tempita==0.5.1
WTForms==1.0.5
Werkzeug==0.9.4
Whoosh==2.5.4
argparse==1.2.1
backports.ssl-match-hostname==3.4.0.2
blinker==1.3
ciscoconfparse==1.1.1
decorator==3.4.0
docutils==0.11
dulwich==0.9.6
## FIXME: could not find svn URL in dependency_links for this package:
flup==1.0.3.dev-20110405
hg-git==0.5.0
ipaddr==2.1.11
itsdangerous==0.23
matplotlib==1.3.1
mercurial==3.0
mock==1.0.1
nose==1.3.3
numexpr==2.4
numpy==1.8.1
numpydoc==0.4
pandas==0.13.1
pyparsing==2.0.2
python-dateutil==2.2
python-openid==2.2.5
pytz==2013b
six==1.6.1
speaklater==1.3
sqlalchemy-migrate==0.7.2
tables==3.1.1
tornado==3.2.1
wsgiref==0.1.2
Performance

Komentar yang paling membantu

Tolong, jangan abaikan masalah ini. Itu ditutup, tetapi saya juga menemukan masalah dengan durasi impor yang lama. Mungkin harus diangkat. Ciptakan kesadaran tentang masalah ini dan tingkatkan prioritasnya? Kalau tidak, itu tidak baik untuk popularitas panda.

Semua 48 komentar

terdengar agak aneh, Anda mungkin memiliki masalah jalur. apakah Anda memiliki beberapa python/lingkungan yang diinstal? apakah mengimpor numpy membutuhkan waktu yang sama?

import pandas
pandas.show_versions()
time python testme.py
0.252u 0.076s 0:00.33 96.9%     0+0k 0+8io 1pf+0w
INSTALLED VERSIONS
------------------
commit: None
python: 2.7.3.final.0
python-bits: 64
OS: Linux
OS-release: 2.6.32-5-amd64
machine: x86_64
processor: 
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8

pandas: 0.14.0rc1-43-g0dec048
nose: 1.3.0
Cython: 0.20
numpy: 1.8.1
scipy: 0.12.0
statsmodels: 0.5.0
IPython: 2.0.0
sphinx: 1.1.3
patsy: 0.1.0
scikits.timeseries: None
dateutil: 1.5
pytz: 2013b
bottleneck: 0.6.0
tables: 3.0.0
numexpr: 2.4
matplotlib: None
openpyxl: 1.5.7
xlrd: 0.9.0
xlwt: 0.7.4
xlsxwriter: None
lxml: 2.3.4
bs4: 4.1.3
html5lib: None
bq: None
apiclient: None
rpy2: None
sqlalchemy: 0.7.7
pymysql: None
psycopg2: 2.4.5 (dt dec pq3 ext)

numpy tampaknya tidak memiliki masalah ini ...

[mpenning<strong i="6">@Mudslide</strong> pymtr]$ time python -c 'import numpy'

real    0m0.184s
user    0m0.136s
sys 0m0.048s
[mpenning<strong i="7">@Mudslide</strong> pymtr]$ time python -c 'import pandas'

real    0m5.724s
user    0m5.516s
sys 0m0.188s
[mpenning<strong i="8">@Mudslide</strong> pymtr]$

tidak ada ide; mengapa Anda tidak mencoba di virtualenv dengan hanya pandas deps yang diinstal

apakah Anda memuat ini melalui jaringan? coba instal secara lokal, cetak pd.__file__ untuk memastikan

menutup sebagai bukan bug.

Saya memiliki masalah yang sama. Apakah ini ditutup karena Anda menemukan solusi? Saya akan berterima kasih jika Anda bisa membagikannya. Terima kasih.

@steve3141 - sudahkah Anda mencoba membuat virtualenv murni dan melihat apakah itu membantu?

Takut saya tidak bisa; kerja, kuncian, dll. Jadi saya menyadari ini sangat mungkin bukan kesalahan panda, kecuali sejauh "impor pandas" mengeksekusi sejumlah besar -- lebih dari 500 menurut hitungan saya -- pernyataan impor sekunder. Overhead sistem file.

Terima kasih,
Steve

Dari: pemberitahuan Jeff [email protected]

Kepada: pydata/pandas [email protected]
Cc: steve3141 [email protected]
Dikirim: Senin, 14 Juli 2014 17.00
Perihal: Re: [pandas] PERF: impor panda terlalu lambat (#7282)

@steve3141 - sudahkah Anda mencoba membuat virtualenv murni dan melihat apakah itu membantu?

Balas email ini secara langsung atau lihat di GitHub.

Saya tahu ini telah ditutup untuk sementara waktu tetapi saya melihat hal yang sama dan ini bukan khusus panda. Kami memiliki lingkungan panda kami di virtualenv pada drive di server. Drive itu kemudian dipasang oleh setiap klien. Ini memungkinkan kami untuk mempertahankan lingkungan paket yang waras di antara semua pengguna. Namun, ini jelas mengorbankan waktu startup ke tingkat yang tidak masuk akal. Waktu impor dalam detik adalah sebagai berikut:

| Paket | Server | Klien |
| --- | --- | --- |
| panda | 1.22 | 6.23 |
| lumpuh | .2 | 1.2 |

Jadi jelas ini adalah masalah pengaturan, tetapi bagaimana perusahaan lain menangani masalah ini? Saya merasa sulit untuk percaya bahwa paket diinstal secara lokal di setiap kotak pengguna dan jika bukan itu masalahnya, mereka mengalami waktu startup yang lama ini.

Jaringan itu sendiri bekerja dengan baik...kecepatan transfer ~120MB/s.

@rockg - tidak tahu tentang setiap perusahaan, tetapi tentu saja semua instalasi yang pernah saya tangani memiliki semuanya secara lokal. Conda dan tox dapat mempermudah pemasangan lokal.

Saya memiliki masalah yang sama -> waktu impor 6 detik, instalasi lokal (anaconda, pandas '0.14.1). Ini sangat lambat, terutama mencoba mengimpor beberapa proses.

Masalah yang sama, (pandas 0,18) meskipun milik saya tidak terlalu buruk: 400ms hanya untuk import pandas pada SSD lokal. Saya tidak dapat membayangkan betapa buruknya ini bagi seseorang yang menggunakan sistem file jaringan.

+1. Saya melihat di mana saja antara 400 - 700ms.

coba hapus cache font mpl. Atau, jika Anda berada di lingkungan yang terkunci sehingga Anda tidak dapat menulis cache, ini mungkin akan mencari font di sistem Anda setiap kali diimpor.

(dalam python3/panda 1.6.2 melalui anaconda)
Di ipython membersihkan cache matplotlib:

import shutil; import matplotlib
shutil.rmtree(matplotlib.get_cachedir())

---- mulai ulang ipython ----

%timeit -n1 -r1 import pandas

381 ms di linux
748 ms di windows
(itu tidak melakukan apa-apa)

mengimpor panda dari ipython(300ms) lebih cepat daripada menjalankannya dari python(500ms)

Mengimpor beberapa sub-dependensi mempercepat pengimporan panda

%timeit -n1 -r1 import pandas
375ms

--- mulai ulang ipython -----

In [1]: %timeit -n1 -r1 import numpy
1 loops, best of 1: 87.8 ms per loop

In [2]: %timeit -n1 -r1 import pytz
1 loops, best of 1: 157 ms per loop

In [3]: %timeit -n1 -r1 import dateutil
1 loops, best of 1: 1.51 ms per loop

In [4]: %timeit -n1 -r1 import matplotlib
1 loops, best of 1: 54 ms per loop

In [5]: %timeit -n1 -r1 import xlsxwriter
1 loops, best of 1: 47.8 ms per loop

In [6]: %timeit -n1 -r1 import pandas
1 loops, best of 1: 177 ms per loop

Sepertinya pytz sangat lambat

Mendapatkan semua modul dari panda

Saya mencopot matplotlib, xlsxwriter, dan cython dan mengimpor sub impor pandas sebelum pandas (seperti yang terlihat melalui sys.modules.keys() ). Waktu impor panda (menjalankan skrip ini melalui juru bahasa) adalah 100 md setelah semua impor dependen alih-alih 500 md:

import __future__
import __main__
import _ast
import _bisect
import _bootlocale
import _bz2
import _codecs
import _collections
import _collections_abc
import _compat_pickle
import _csv
import _ctypes
import _datetime
import _decimal
import _frozen_importlib
import _functools
import _hashlib
import _heapq
import _imp
import _io
import _json
import _locale
import _lzma
import _opcode
import _operator
import _pickle
import _posixsubprocess
import _random
import _sitebuiltins
import _socket
import _sre
import _ssl
import _stat
import _string
import _struct
import _sysconfigdata
import _thread
import _warnings
import _weakref
import _weakrefset
import abc
import argparse
import ast
import atexit
import base64
import binascii
import bisect
import builtins
import bz2
import calendar
import codecs
import collections
import contextlib
import copy
import copyreg
import csv
import ctypes
import datetime
import dateutil
import decimal
import difflib
import dis
import distutils
import email
import encodings
import enum
import errno
import fnmatch
import functools
import gc
import genericpath
import gettext
import grp
import hashlib
import heapq
import http
import importlib
import inspect
import io
import itertools
import json
import keyword
import linecache
import locale
import logging
import lzma
import marshal
import math
import numbers
import numexpr
import numpy
import opcode
import operator
import os
import parser
import pickle
import pkg_resources
import pkgutil
import platform
import plistlib
import posix
import posixpath
import pprint
import pwd
import pyexpat
import pytz
import quopri
import random
import re
import reprlib
import select
import selectors
import shutil
import signal
import site
import six
import socket
import sre_compile
import sre_constants
import sre_parse
import ssl
import stat
import string
import struct
import subprocess
import symbol
import sys
import sysconfig
import tarfile
import tempfile
import textwrap
import threading
import time
import timeit
import token
import tokenize
import traceback
import types
import unittest
import urllib
import uu
import uuid
import warnings
import weakref
import xml
import zipfile
import zipimport
import zlib

print(timeit.timeit('import pandas', number=1))

Solusinya mungkin dengan membuat stratifikasi impor ini sebelum Anda membutuhkan panda

Saya mendapatkan hasil yang serupa tanpa anaconda / python2 / pandas 1.8

Masalah serupa bagi saya. Itu membuat pengembangan di Flask tidak tertahankan karena 10 detik setelah setiap file diubah untuk dimuat ulang. Saya men-debug-nya dengan waktu impor 3-10 detik panda adalah penyebab utama (2015 MBA) menjalankan anaconda pada 3,5

Ada beberapa caching yang terjadi, tetapi tidak yakin apa ...

python -m timeit -n1 -r1 "impor panda"
1 loop, terbaik 1: 3,71 detik per loop
(abg) jacob@Jacobs-Air :~/stuff/abg% python -m timeit -n1 -r1 "import pandas"
1 loop, terbaik 1: 652 msec per loop

Salah satu solusinya adalah mengisolasi semua kode yang berinteraksi dengan panda dan dengan malas mengimpor kode itu hanya saat Anda membutuhkannya sehingga masa tunggu hanya selama eksekusi program. (itu yang saya lakukan)

Saya tidak berpikir itu akan membantu - maka saya akan mengalami penundaan setiap memuat ulang
(karena semua kode saya berfungsi dengan panda).

Saya telah melakukan ini di jendela terminal:

'''
sementara benar; lakukan tanggal && python -m timeit -n1 -r1 "import panda"; tidur 2;
selesai;
'''

Melakukan hal ini membuat panda tetap berada di cache OS. Peretasan bodoh, tetapi terus memuat
hingga 300-500ms.

-J

Pada Sabtu, 7 Januari 2017 pukul 07:27, Bryce Guinta [email protected]
menulis:

Salah satu solusinya adalah mengisolasi semua kode yang berinteraksi dengan panda dan
malas mengimpor kode itu hanya ketika Anda membutuhkannya sehingga masa tunggunya adalah
hanya selama eksekusi program. (itu yang saya lakukan)


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/pandas-dev/pandas/issues/7282#issuecomment-271054552 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAHchj5AFRzCAFrswjpTz1B7e0XM-mo1ks5rPvEDgaJpZM4B_lQ5
.

--
+919971876580
twitter: @JacobSingh ( http://twitter.com/#!/JacobSingh )
web: http://www.jacobsingh.name
Skype: desain piyama
gTalk: [email protected]

Saya mengalami masalah serupa. Berjalan di OSX dan melakukan hal yang sama di virtualenv dan di luarnya. Mencoba menginstal ulang semuanya dan itu tidak membantu. Tampaknya bukan matplotlib karena itu sendiri relatif cepat. Sangat sulit untuk memecahkan masalah ini - sepertinya tidak menunjukkan apa pun di log.

Adakah yang bisa membuat profil "impor panda" sederhana dan kami dapat melihat apakah masalahnya mudah diidentifikasi?

Jadi saya melakukan profil cepat dan menemukan yang berikut:

         93778 function calls (91484 primitive calls) in 4.278 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        6    0.426    0.071    0.905    0.151 api.py:3(<module>)
        1    0.306    0.306    4.276    4.276 __init__.py:5(<module>)
        1    0.189    0.189    0.211    0.211 base.py:1(<module>)
        1    0.163    0.163    0.426    0.426 api.py:1(<module>)
        1    0.129    0.129    1.170    1.170 format.py:5(<module>)
        2    0.121    0.061    0.197    0.099 base.py:3(<module>)
       20    0.120    0.006    0.390    0.019 __init__.py:1(<module>)
        3    0.119    0.040    0.178    0.059 common.py:1(<module>)
        1    0.115    0.115    0.572    0.572 __init__.py:26(<module>)
        1    0.112    0.112    0.569    0.569 frame.py:10(<module>)
        1    0.111    0.111    0.214    0.214 httplib.py:67(<module>)
        2    0.103    0.051    0.630    0.315 index.py:2(<module>)
        1    0.089    0.089    0.144    0.144 parser.py:29(<module>)
        1    0.078    0.078    0.084    0.084 excel.py:3(<module>)
        1    0.074    0.074    0.840    0.840 api.py:5(<module>)
        1    0.072    0.072    0.091    0.091 sparse.py:4(<module>)
        1    0.070    0.070    0.149    0.149 gbq.py:1(<module>)
        1    0.070    0.070    0.650    0.650 groupby.py:1(<module>)
        1    0.068    0.068    0.138    0.138 generic.py:2(<module>)
        1    0.063    0.063    1.265    1.265 config_init.py:11(<module>)
        1    0.060    0.060    0.060    0.060 socket.py:45(<module>)
        1    0.055    0.055    0.145    0.145 eval.py:4(<module>)
        1    0.054    0.054    0.075    0.075 expr.py:2(<module>)
        2    0.052    0.026    0.069    0.035 __init__.py:9(<module>)
        1    0.052    0.052    0.054    0.054 pytables.py:4(<module>)
        1    0.052    0.052    0.165    0.165 series.py:3(<module>)

Sepertinya init pada baris 5 menghabiskan sebagian besar waktu- apakah ini init utama panda?

hanya untuk perbandingan di osx.

# 2.7
bash-3.2$ ~/miniconda3/envs/py2.7/bin/python -m timeit -n1 -r1 "import numpy"
1 loops, best of 1: 287 msec per loop
bash-3.2$ ~/miniconda3/envs/py2.7/bin/python -m timeit -n1 -r1 "import pandas"
1 loops, best of 1: 671 msec per loop

# 3.5
bash-3.2$ ~/miniconda3/envs/pandas/bin/python -m timeit -n1 -r1 "import numpy"
1 loops, best of 1: 168 msec per loop
bash-3.2$ ~/miniconda3/envs/pandas/bin/python -m timeit -n1 -r1 "import pandas"
1 loops, best of 1: 494 msec per loop

Mungkin di-cache?

Pada Selasa, 10 Jan 2017 jam 21:56, Jeff [email protected]
menulis:

hanya untuk perbandingan di osx.

2.7

bash-3.2$ ~/miniconda3/envs/py2.7/bin/python -m timeit -n1 -r1 "import numpy"
1 loop, terbaik 1: 287 msec per loop
bash-3.2$ ~/miniconda3/envs/py2.7/bin/python -m timeit -n1 -r1 "import panda"
1 loop, terbaik dari 1: 671 msec per loop

3.5

bash-3.2$ ~/miniconda3/envs/pandas/bin/python -m timeit -n1 -r1 "import numpy"
1 loop, terbaik dari 1: 168 msec per loop
bash-3.2$ ~/miniconda3/envs/pandas/bin/python -m timeit -n1 -r1 "impor pandas"
1 loop, terbaik 1: 494 msec per loop


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/pandas-dev/pandas/issues/7282#issuecomment-271622897 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/AAHchrtO89XXFLDcIdOvZzNQFEzSgmPrks5rQ7FOgaJpZM4B_lQ5
.

--
+919971876580
twitter: @JacobSingh ( http://twitter.com/#!/JacobSingh )
web: http://www.jacobsingh.name
Skype: desain piyama
gTalk: [email protected]

tidak yakin apa yang menurut Anda di-cache

@RexFuzzle Saya terkejut Anda tidak memiliki nama file yang panjang. Apakah Anda menghapus direktori? Anda harus melihat sesuatu seperti di bawah ini. Itu akan membuatnya lebih mudah untuk melihat apa yang menghabiskan sebagian besar waktu. Saya pikir itu tergantung pada panda yang mengimpor banyak dependensi yang masing-masing memiliki hit mereka sendiri.

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.296    0.296    4.990    4.990 /mnt/environment/software/python/lib/python2.7/site-packages/pandas/__init__.py:3(<module>)
        1    0.198    0.198    0.331    0.331 /mnt/environment/software/python/lib/python2.7/site-packages/numpy/core/__init__.py:1(<module>)
        1    0.165    0.165    0.248    0.248 /mnt/environment/software/python/lib/python2.7/site-packages/bottleneck/__init__.py:3(<module>)
        1    0.154    0.154    0.164    0.164 /mnt/environment/software/python/lib/python2.7/site-packages/bs4/dammit.py:8(<module>)
        1    0.134    0.134    0.164    0.164 /mnt/environment/software/python/lib/python2.7/site-packages/pandas/core/common.py:3(<module>)

Hmmm, itu aneh- saya tidak menghapus apa pun- menggunakan cProfile- tidak tahu apakah itu penyebabnya. Akan menyelidikinya sedikit lebih jauh besok. Dari hasil saya meskipun tampaknya hanya init yang memakan waktu sepanjang waktu- akan mencoba untuk mendapatkan milik saya dalam format yang sama dengan milik Anda dan kemudian kita dapat membandingkan- melihat apakah init file dan nomor barisnya sama.

Simpan cprofile ke file dan kemudian muat dengan pstats dan cetak. Jika itu adalah modul tertentu, jalankan profiler baris untuk melihat apakah itu sesuatu yang spesifik atau hanya banyak hal kecil.

import cProfile
import pstats
cProfile.run("import pandas", "pandasImport")
p = pstats.Stats("pandasImport")
p.sort_stats("tottime").print_stats()

Bagi saya, beban pertama adalah 4s. OS menyimpan perpustakaan di memori, jadi
itu sekitar 300-500ms. Tunggu sebentar, dan coba lagi.

Terbaik,
Yakub
Pada Selasa, 10 Jan 2017 pukul 22:42, Jeff [email protected]
menulis:

tidak yakin apa yang menurut Anda di-cache

--
+919971876580
twitter: @JacobSingh ( http://twitter.com/#!/JacobSingh )
web: http://www.jacobsingh.name
Skype: desain piyama
gTalk: [email protected]

Oke, jadi jalankan seperti yang disarankan @rockg :

Wed Jan 11 08:56:08 2017    pandasImport

         103330 function calls (100844 primitive calls) in 14.431 seconds

   Ordered by: internal time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.701    0.701   14.432   14.432 /usr/local/lib/python2.7/site-packages/pandas/__init__.py:5(<module>)
        1    0.611    0.611    2.023    2.023 /usr/local/lib/python2.7/site-packages/numpy/core/__init__.py:1(<module>)
        1    0.575    0.575    1.420    1.420 /usr/local/lib/python2.7/site-packages/pandas/io/api.py:3(<module>)
        1    0.565    0.565    0.621    0.621 /usr/local/lib/python2.7/site-packages/pandas/indexes/base.py:1(<module>)
        1    0.563    0.563    3.323    3.323 /usr/local/lib/python2.7/site-packages/numpy/lib/__init__.py:1(<module>)
        1    0.393    0.393    0.394    0.394 /usr/local/lib/python2.7/site-packages/pandas/computation/engines.py:2(<module>)
        1    0.378    0.378    1.080    1.080 /usr/local/lib/python2.7/site-packages/pandas/indexes/api.py:1(<module>)
        1    0.313    0.313    1.991    1.991 /usr/local/lib/python2.7/site-packages/pandas/core/groupby.py:1(<module>)
        1    0.313    0.313    0.401    0.401 /usr/local/lib/python2.7/site-packages/numpy/polynomial/__init__.py:15(<module>)
        1    0.271    0.271    1.338    1.338 /usr/local/lib/python2.7/site-packages/pandas/compat/__init__.py:26(<module>)
        1    0.262    0.262    0.311    0.311 /usr/local/lib/python2.7/site-packages/pandas/core/sparse.py:4(<module>)
        1    0.246    0.246    0.246    0.246 /usr/local/lib/python2.7/site-packages/numpy/lib/npyio.py:1(<module>)
        1    0.240    0.240    0.493    0.493 /usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py:67(<module>)
        1    0.238    0.238    0.447    0.447 /usr/local/lib/python2.7/site-packages/numpy/testing/utils.py:4(<module>)
        1    0.238    0.238    2.684    2.684 /usr/local/lib/python2.7/site-packages/pandas/formats/format.py:5(<module>)
        1    0.221    0.221    0.271    0.271 /usr/local/lib/python2.7/site-packages/numpy/ma/__init__.py:41(<module>)
        1    0.220    0.220    2.976    2.976 /usr/local/lib/python2.7/site-packages/pandas/core/config_init.py:11(<module>)
        1    0.217    0.217    0.365    0.365 /usr/local/lib/python2.7/site-packages/pandas/core/base.py:3(<module>)
        1    0.215    0.215    4.526    4.526 /usr/local/lib/python2.7/site-packages/numpy/__init__.py:106(<module>)
        1    0.208    0.208    0.425    0.425 /usr/local/lib/python2.7/site-packages/pandas/core/generic.py:2(<module>)
        1    0.207    0.207    1.667    1.667 /usr/local/lib/python2.7/site-packages/pandas/core/frame.py:10(<module>)
        1    0.194    0.194    2.565    2.565 /usr/local/lib/python2.7/site-packages/pandas/core/api.py:5(<module>)
        1    0.192    0.192    0.194    0.194 /usr/local/lib/python2.7/site-packages/pandas/io/pytables.py:4(<module>)
        1    0.182    0.182    0.307    0.307 /usr/local/lib/python2.7/site-packages/pytz/__init__.py:9(<module>)
        1    0.173    0.173    0.374    0.374 /usr/local/lib/python2.7/site-packages/pandas/io/common.py:1(<module>)
        1    0.167    0.167    0.337    0.337 /usr/local/lib/python2.7/site-packages/pandas/stats/api.py:3(<module>)
        1    0.161    0.161    0.167    0.167 /usr/local/lib/python2.7/site-packages/pandas/io/excel.py:3(<module>)
        1    0.160    0.160    0.330    0.330 /usr/local/lib/python2.7/site-packages/numpy/core/numeric.py:1(<module>)
        1    0.159    0.159    0.160    0.160 /usr/local/lib/python2.7/site-packages/numpy/random/__init__.py:88(<module>)
        1    0.158    0.158    0.204    0.204 /usr/local/lib/python2.7/site-packages/pandas/computation/expr.py:2(<module>)
        1    0.150    0.150    0.232    0.232 /usr/local/lib/python2.7/site-packages/pandas/tseries/frequencies.py:1(<module>)

Baiklah, mari kita melangkah lebih jauh dan membuat profil baris pandas.__init__ . Anda dapat melakukan ini dengan menggunakan line_profiler .

Mungkin Anda juga bisa mencoba https://github.com/cournape/import-profiler

Tetapi melihat nilai-nilai di atas, meskipun waktu impor jauh lebih besar, juga numpy membutuhkan waktu lebih lama. Rasio impor numpy ke impor panda penuh tampaknya agak sama untuk jumlah yang jauh lebih kecil yang diposting @jreback , atau saya juga melihat). Jadi jika numpy sudah memakan waktu lebih dari 4 detik untuk mengimpor, tentu saja kita tidak akan mendapatkan waktu impor pandas di bawah itu.

Terima kasih untuk semua masukannya. Saya menjalankan dtruss dalam waktu yang berarti dan menemukan bahwa tidak ada yang terjadi selama beberapa detik sebelum sesuatu muncul di sana dan jadi saya berpikir bahwa ada jeda pada pembacaan disk alih-alih menjadi masalah python, ini, bagi saya, adalah ditegakkan kembali oleh fakta bahwa waktu tampaknya dikelompokkan dengan baris pertama dari file init (artefak dari cProfile?). Akan melakukan sedikit lebih banyak penggalian. Juga setuju bahwa itu tampaknya lebih merupakan masalah numpy dan akan melihat-lihat masalah mereka dan melihat apakah ada orang lain yang memiliki hal serupa.
Terima kasih sekali lagi atas masukannya.

Juga setuju bahwa itu tampaknya lebih merupakan masalah numpy

Maaf, bukan itu yang ingin saya katakan. Saya hanya bermaksud bahwa numpy dan panda tampaknya membutuhkan waktu lebih lama (dibandingkan dengan laptop saya, keduanya x10 hingga x15 kali lebih lama), sehingga tidak harus menunjukkan dengan tepat impor tertentu yang menjadi penyebabnya. Tampaknya umumnya lebih lambat. Yang tidak berarti tentu saja kita mungkin melakukan impor panda yang lebih malas untuk memperbaiki keadaan, jika ada kemacetan.

Tolong, jangan abaikan masalah ini. Itu ditutup, tetapi saya juga menemukan masalah dengan durasi impor yang lama. Mungkin harus diangkat. Ciptakan kesadaran tentang masalah ini dan tingkatkan prioritasnya? Kalau tidak, itu tidak baik untuk popularitas panda.

Saya bersedia dan dapat melakukan pengujian lagi, tetapi saya tidak tahu pengujian jenis profil lain yang dapat saya jalankan yang dapat mencoba menemukan sumbernya, jadi saya terbuka untuk saran.

Salam,

Saat menggunakan panda dengan kumpulan data yang tidak terlalu besar, dibutuhkan setidaknya 5 hingga 10 detik untuk menguraikan semua data dan plot, yang merupakan waktu yang cukup lama.
Jadi, langkah-langkah yang membawa saya ke eksekusi panda yang lambat di pycharm adalah:

  1. Instalasi Anaconda untuk semua pengguna
  2. Instalasi Python 3.6.1

Jadi, karena, itu adalah jumlah waktu yang tidak normal untuk eksekusi kode kecil, saya memutuskan untuk menghapus instalan Anaconda dan Python 3.6.1 dan mengambil langkah tambahan:

  1. Instal visualcppbuildtoolsfull (yang dapat ditemukan di sini: http://landinghub.visualstudio.com/visual-cpp-build-tools)
  2. Instalasi Python 3.6.1
  3. Instalasi Anaconda untuk semua pengguna
  4. Pengaturan Default Pycharm > Penerjemah Proyek > Pilih yang benar (python umum 3.6.1 atau Anaconda) untuk melakukan kueri melalui semua paket.
  5. (Opsional) Saya sarankan melakukan langkah 4 untuk setiap jalur yang dideteksi pycharm.

Sekarang eksekusi kode lebih cepat (jauh lebih cepat dari sebelumnya).
Saya harap ini membantu seseorang.

Saya baru saja menjalankan yang sama seperti yang disarankan rockg tetapi diurutkan berdasarkan cumtime , bukan tottime , yang segera menunjukkan bahwa modul pytz membutuhkan setengah dari total waktu impor (di PC saya ). Apakah ada cara untuk membuat ini opsional atau malas? Saya jarang menggunakan datetimes, dan ketika saya melakukannya, mereka hampir selalu UTC, jadi saya memiliki sedikit minat pada zona waktu.

Sama dengan modul pandas.plotting -- Saya memiliki aplikasi yang tidak melakukan plot apa pun, jadi rasanya itu menambah waktu yang signifikan untuk mengimpor tanpa manfaat. Sepertinya masuk akal untuk membuat ini malas, karena matplotlib membutuhkan waktu lama dan tambahan 0,15 detik tidak terlihat.


import cProfile
import pstats
cProfile.run("import pandas", "pandasImport")
p = pstats.Stats("pandasImport")
p.sort_stats("cumtime").print_stats()

yang dicetak (hal-hal di bawah 0,1 detik elided)

Mon Oct 23 14:01:19 2017    pandasImport

         204659 function calls (202288 primitive calls) in 1.875 seconds

   Ordered by: cumulative time

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.042    0.042    1.876    1.876 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\__init__.py:5(<module>)
   321/44    0.041    0.000    1.156    0.026 {__import__}
        1    0.008    0.008    0.925    0.925 c:\app\python\anaconda\1.6.0\lib\site-packages\pytz\__init__.py:9(<module>)
        1    0.002    0.002    0.914    0.914 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:14(<module>)
        1    0.000    0.000    0.651    0.651 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:704(subscribe)
      217    0.000    0.000    0.650    0.003 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:2870(<lambda>)
      217    0.001    0.000    0.650    0.003 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:2299(activate)
      427    0.002    0.000    0.602    0.001 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:1845(_handle_ns)
      217    0.001    0.000    0.586    0.003 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:1898(fixup_namespace_packages)
      411    0.003    0.000    0.581    0.001 c:\app\python\anaconda\1.6.0\lib\pkgutil.py:176(find_module)
      411    0.571    0.001    0.571    0.001 {imp.find_module}
        1    0.011    0.011    0.423    0.423 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\core\api.py:5(<module>)
        1    0.007    0.007    0.352    0.352 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\core\groupby.py:1(<module>)
       40    0.001    0.000    0.248    0.006 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:444(add_entry)
      472    0.005    0.000    0.236    0.001 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:1779(find_on_path)
        1    0.005    0.005    0.231    0.231 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\core\frame.py:10(<module>)
      472    0.188    0.000    0.188    0.000 {nt._isdir}
      476    0.002    0.000    0.187    0.000 {map}
        1    0.023    0.023    0.173    0.173 c:\app\python\anaconda\1.6.0\lib\site-packages\numpy\__init__.py:106(<module>)
        1    0.003    0.003    0.157    0.157 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\core\series.py:3(<module>)
        1    0.005    0.005    0.142    0.142 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\plotting\__init__.py:3(<module>)
        1    0.008    0.008    0.132    0.132 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\plotting\_converter.py:1(<module>)
        1    0.000    0.000    0.127    0.127 c:\app\python\anaconda\1.6.0\lib\site-packages\pkg_resources.py:430(__init__)
        1    0.003    0.003    0.119    0.119 c:\app\python\anaconda\1.6.0\lib\site-packages\numpy\add_newdocs.py:10(<module>)
        1    0.019    0.019    0.115    0.115 c:\app\python\anaconda\1.6.0\lib\site-packages\numpy\lib\__init__.py:1(<module>)
        1    0.002    0.002    0.109    0.109 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\util\_tester.py:3(<module>)
        1    0.015    0.015    0.107    0.107 c:\app\python\anaconda\1.6.0\lib\site-packages\pytest.py:4(<module>)
        1    0.005    0.005    0.102    0.102 c:\app\python\anaconda\1.6.0\lib\site-packages\pandas\core\index.py:2(<module>)

FYI - Saya memiliki SSD di PC saya jadi jika ada masalah pencarian disk yang dimiliki beberapa orang, saya tidak melihatnya. numpy 1,12 membutuhkan 0,17 detik untuk mengimpor.

@ jason-s pytz mengimpor dalam <5 mikrodetik di mesin saya, jadi ada yang aneh di sana.

FYI #17710 melakukan beberapa pekerjaan pada ini, jadi semuanya akan lebih cepat di rilis mendatang (tidak ada yang menyentuh pytz).

Saya menggunakan pandas 0.20.2 dengan pytz 2016.4 pada mesin Windows 7 yang menjalankan Anaconda Python 2.7

Saya baru saja menjalankan conda uninstall pytz dan menginstalnya kembali, sekarang dibutuhkan 0,01 detik dengan pytz-2017.2

Menginstal ulang pytz 2016.4 (conda install pytz=2016.4) dan melambat kembali menjadi 0,92 detik lagi

Menginstal pytz 2016.7 -- ini juga sangat cepat (13 milidetik untuk diimpor). Ada item dalam data profil yang disebut "lazy.py" yang sepertinya diubah menjadi pemuatan "malas" pada 2016.7.

import cProfile
import pstats
cProfile.run("import pytz", "profiling_data")
p = pstats.Stats("profiling_data")
p.sort_stats("cumtime").print_stats()

yang mencetak ini untuk pytz 2016.7:

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.005    0.005    0.018    0.018 <string>:1(<module>)
        1    0.008    0.008    0.013    0.013 c:\app\python\anaconda\1.6.0\lib\site-packages\pytz\__init__.py:9(<module>)
        2    0.002    0.001    0.002    0.001 c:\app\python\anaconda\1.6.0\lib\site-packages\pytz\lazy.py:135(__new__)
        1    0.002    0.002    0.002    0.002 c:\app\python\anaconda\1.6.0\lib\site-packages\pytz\tzinfo.py:1(<module>)
        1    0.000    0.000    0.001    0.001 c:\app\python\anaconda\1.6.0\lib\site-packages\pytz\lazy.py:1(<module>)
        1    0.000    0.000    0.000    0.000 c:\app\python\anaconda\1.6.0\lib\site-packages\pytz\tzfile.py:4(<module>)
        2    0.000    0.000    0.000    0.000 c:\app\python\anaconda\1.6.0\lib\site-packages\pytz\lazy.py:80(__new__)

Hmm. sayangnya beralih ke pytz 2017.2 (atau 2016.7) tampaknya tidak mempercepat impor pandas; sepertinya ada banyak dependensi bersama di antara keduanya, atau selama proses pandas __init__ ia menggunakan pytz dan meniadakan keunggulan kecepatan yang disediakan pytz import dengan inisialisasi malas.

Oh, ini dia, keduanya menggunakan pkg_resources.py, yang membutuhkan waktu sekitar 0,9 detik di PC saya untuk mengeksekusi apa pun yang dilakukannya, baik dari pytz atau panda.

Saya memiliki setuptools 27.2 (termasuk pkg_resources); ini tampaknya terkait dengan masalah ini https://github.com/pypa/setuptools/issues/926

Oke, saya menggunakan ripgrep di paket situs saya untuk mencari pkg_resources, dan pelakunya adalah pytz (yang sekarang menggunakannya dengan malas) dan numexpr.

Saya mengajukan masalah dengan numexpr.

Apakah numexpr diimpor dengan malas di panda di rilis mendatang? Itu area lain di mana fitur yang tidak pernah saya gunakan (setidaknya, saya pikir saya tidak pernah menggunakannya) memperlambat impor panda secara signifikan.

edit: sudahlah, Anda sudah tahu tentang ini:

https://github.com/pandas-dev/pandas/pull/17710#issuecomment -332952362

Untuk referensi, inilah profil impor menggunakan importtime Python 3.7 dan tuna :

python3.7 -X importtime -c "import pandas" 2> pandas.log
tuna pandas.log

pandas

Solusi kami adalah menyiapkan server web, dan menggunakan permintaan posting ke bagian algoritme, dan waktu untuk mengimpor paket "pandas" dapat dikurangi.

memiliki masalah yang sama di sini

python -m timeit -n1 -r1 "impor panda"
1 loop, terbaik dari 1: 8,56 detik per loop

Jangan ragu untuk membuat PR jika Anda mengidentifikasi perbaikan yang mudah.

Pada Rabu, 28 November 2018 pukul 16:41 hosamn [email protected] menulis:

memiliki masalah yang sama di sini

python -m timeit -n1 -r1 "impor panda"
1 loop, terbaik dari 1: 8,56 detik per loop


Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/pandas-dev/pandas/issues/7282#issuecomment-442633080 ,
atau matikan utasnya
https://github.com/notifications/unsubscribe-auth/ABQHIix6pTkeFPbLXh1GHnWwM8L_y4ceks5uzxD9gaJpZM4B_lQ5
.

Jadi saya pikir saya mungkin telah menemukan masalah ini. Lebih dari 50% waktu saya adalah satu panggilan fungsi tunggal: mkl._py_mkl_service.get_version

pandaImpor

     187472 function calls (181157 primitive calls) in 4.406 seconds

Diurutkan oleh: waktu internal

ncalls tottime percall cumtime percall nama file: lineno (fungsi)
1 2.295 2.295 2.295 2.295 {metode bawaan mkl._py_mkl_service.get_version}

Kode

import cProfile
import pstats
cProfile.run("import pandas", "pandasImport")
p = pstats.Stats("pandasImport")
p.sort_stats("tottime").print_stats()

pandas.show_versions()

INSTALLED VERSIONS
------------------
commit           : f2ca0a2665b2d169c97de87b8e778dbed86aea07
python           : 3.7.4.final.0
python-bits      : 64
OS               : Windows
OS-release       : 10
Version          : 10.0.18362
machine          : AMD64
processor        : Intel64 Family 6 Model 142 Stepping 10, GenuineIntel
byteorder        : little
LC_ALL           : None
LANG             : None
LOCALE           : None.None

pandas           : 1.1.1
numpy            : 1.19.1
pytz             : 2020.1
dateutil         : 2.8.1
pip              : 20.2.2
setuptools       : 49.6.0.post20200814
Cython           : 0.29.21
pytest           : 6.0.2
hypothesis       : 5.35.3
sphinx           : 2.2.0
blosc            : None
feather          : None
xlsxwriter       : 1.3.3
lxml.etree       : 4.5.2
html5lib         : 1.1
pymysql          : None
psycopg2         : None
jinja2           : 2.11.2
IPython          : 7.18.1
pandas_datareader: None
bs4              : 4.9.1
bottleneck       : 1.3.2
fsspec           : 0.8.0
fastparquet      : None
gcsfs            : None
matplotlib       : 3.3.1
numexpr          : 2.7.1
odfpy            : None
openpyxl         : 3.0.5
pandas_gbq       : None
pyarrow          : None
pytables         : None
pyxlsb           : None
s3fs             : None
scipy            : 1.5.2
sqlalchemy       : 1.3.19
tables           : 3.6.1
tabulate         : None
xarray           : None
xlrd             : 1.2.0
xlwt             : 1.3.0
numba            : 0.51.2
Apakah halaman ini membantu?
0 / 5 - 0 peringkat