python 初学者表现:for 循环 Vs 迭代器 Vs Pandas
python beginner performance : for loop Vs iterator Vs Pandas
出于学习目的,我得到了银行对账单
作为 csv 文件:
data = pd.read_csv('./datasets/code/analyse/operations.csv')
data.columns = ['identifiant_transaction', 'date_operation', 'date_valeur', 'libelle', 'debit', 'credit', 'solde']
print(data.libelle.head())
显示如下:
0 FORFAIT COMPTE SUPERBANK XX XX XX XX
1 CARTE XX XX CHEZ LUC XX
2 PRELEVEMENT XX TELEPHONE XX XX
3 CARTE XX XX XX XX XX XX
4 CARTE XX XX XX XX
Name: libelle, dtype: object
我的目标是提取“libelle”中最常用的词:
XX 142800
CARTE 24700
VIREMENT 2900
ROBINSON 2000
ANCIENS 2000
我先试试 :
def most_common_words(labels):
words = []
for lab in labels:
words += lab.split(" ")
return Counter(words).most_common()
然后 :
def most_common_words_iter(labels):
return Counter(chain(*(words.split(" ") for words in labels))).most_common()
最后:
def most_common_words_pandas(labels):
return labels.str.split().explode().value_counts(sort=True)
我的假设是第一个解决方案会因为中间列表而变慢,第二个或第三个解决方案可能会引发一些免费的集成优化(矢量化、更好的流管理、更少的内存分配......) .但是,没有 :-/
python vs iterable vs pandas
这是应该的吗?还是我应该换一种方式?
我通过修改“python”版本获得了一些改进 (30-40%):
def most_common_words(labels):
words = ' '.join(labels.values)
words = words.split(' ')
return Counter(words).most_common()
出于学习目的,我得到了银行对账单 作为 csv 文件:
data = pd.read_csv('./datasets/code/analyse/operations.csv')
data.columns = ['identifiant_transaction', 'date_operation', 'date_valeur', 'libelle', 'debit', 'credit', 'solde']
print(data.libelle.head())
显示如下:
0 FORFAIT COMPTE SUPERBANK XX XX XX XX
1 CARTE XX XX CHEZ LUC XX
2 PRELEVEMENT XX TELEPHONE XX XX
3 CARTE XX XX XX XX XX XX
4 CARTE XX XX XX XX
Name: libelle, dtype: object
我的目标是提取“libelle”中最常用的词:
XX 142800
CARTE 24700
VIREMENT 2900
ROBINSON 2000
ANCIENS 2000
我先试试 :
def most_common_words(labels):
words = []
for lab in labels:
words += lab.split(" ")
return Counter(words).most_common()
然后 :
def most_common_words_iter(labels):
return Counter(chain(*(words.split(" ") for words in labels))).most_common()
最后:
def most_common_words_pandas(labels):
return labels.str.split().explode().value_counts(sort=True)
我的假设是第一个解决方案会因为中间列表而变慢,第二个或第三个解决方案可能会引发一些免费的集成优化(矢量化、更好的流管理、更少的内存分配......) .但是,没有 :-/
python vs iterable vs pandas
这是应该的吗?还是我应该换一种方式?
我通过修改“python”版本获得了一些改进 (30-40%):
def most_common_words(labels):
words = ' '.join(labels.values)
words = words.split(' ')
return Counter(words).most_common()