Y a-t-il une différence dans le calcul entre Numpy et Pandas?

j'ai écrit un tas de code sur l'hypothèse que j'allais utiliser des tableaux Numpy. Il s'avère que les données que je reçois est chargé à travers Pandas. Je me souviens maintenant que je l'ai chargé dans Pandas parce que j'avais des problèmes pour le charger dans Numpy. Je pense que les données étaient trop importantes.

par conséquent, je me demandais, y a-t-il une différence dans la capacité de calcul en utilisant Numpy vs Pandas?

si Pandas est plus efficace, alors je préfère réécrire tout mon code pour Pandas, mais s'il n'y a plus d'efficacité, j'utiliserai juste un numpy array...

25
demandé sur Saullo G. P. Castro 2014-02-05 07:04:55
la source

2 ответов

il peut y avoir une différence de performance significative, d'un ordre de grandeur pour les multiplications et plusieurs ordres de grandeur pour indexer quelques valeurs aléatoires.

en fait, je me posais la question à propos de la même chose et je suis tombé sur cette comparaison intéressante: http://penandpants.com/2014/09/05/performance-of-pandas-series-vs-numpy-arrays/

14
répondu Mark 2015-01-11 19:04:56
la source

je pense qu'il s'agit plutôt d'utiliser les deux données de façon stratégique et de les déplacer (de numpy à pandas ou vice versa) en fonction de la performance que vous voyez. Comme exemple récent, j'ai essayé de concaténer 4 petits fichiers de pickle avec 10k lignes chacun data.shape -> (10,000, 4) à l'aide de numpy.

Code était quelque chose comme:

n_concat = np.empty((0,4))
for file_path in glob.glob('data/0*', recursive=False):
    n_data = joblib.load(file_path)
    n_concat = np.vstack((co_np, filtered_snp))
joblib.dump(co_np, 'data/save_file.pkl', compress = True)

ceci a crashé mon portable (8 Go, i5) ce qui était surprenant puisque le volume n'était pas vraiment énorme. Les 4 fichiers comprimés de décapage étaient à peu près environ 5 Mo chacun.

la même chose, ça a bien marché sur les pandas.

for file_path in glob.glob('data/0*', recursive=False):
    n_data = joblib.load(sd)
    try:
        df = pd.concat([df, pd.DataFrame(n_data, columns = [...])])
    except NameError:
        df = pd.concat([pd.DataFrame(n_data,columns = [...])])
joblib.dump(df, 'data/save_file.pkl', compress = True)

D'un autre côté, quand je mettais en œuvre gradient descent en itérant sur un cadre de données pandas, il était horriblement lent, tandis que l'utilisation de numpy pour le travail était beaucoup plus rapide.

en général, j'ai vu que pandas fonctionne généralement mieux pour se déplacer / munging morceaux modérément grands de données et de faire des opérations de la colonne commune tandis que numpy fonctionne mieux pour le travail vectorisé et récursive (peut-être un travail plus intense en mathématiques) sur de plus petits ensembles de données.

déplacer les données entre les deux est sans tracas, donc je suppose, utiliser les deux de façon stratégique est la voie à suivre.

2
répondu Gaurav 2018-08-30 10:51:01
la source

Autres questions sur