python在导入pandas时出现问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python在导入pandas时出现问题相关的知识,希望对你有一定的参考价值。

系统提示没有pkg_resources这个模块,但是我不知道这个是哪个python库的啊
pandas安装需要的所有库我都装了
好了,找到问题解决方案了,再安装setuptools这个库就可以了

你遇到的问题一看就是少装了包。在windows下安装pandas,只安装pandas一个包显然是不够的,它并没有把用到的相关包都打进去,这点是很麻烦的,只有等错误信息出来后才知道少了哪些包。

我总结了一下,一共需要安装如下包:
pyparsing-2.0.2.win32-py2.7.exe
matplotllib-1.3.1.win32-py2.7.exe
openpyxl-openpyxl-5d2c0c8704d2.tar.gz
setuptools-3.8.1.win32-py2.7.exe
numpy-MKL-1.8.1.win32-py2.7.exe
six-1.7.3.win32-py2.7.exe
python-dateutil-2.2.win32-py2.7.exe

这些安装包的下载地址是:
http://www.lfd.uci.edu/~gohlke/pythonlibs

另外一个很重要的注意事项是版本问题,Python扩展包和Python的版本严格相关,不同版本的Python,其扩展包的版本也不同。

最后一个注意事项是32位和64位不要搞混了,所有扩展包都分32位和64位两种版本。

总体来说,个人感觉Python和Pandas不适合用于windows操作系统,它在ubuntu下使用更顺溜许多。如果你主要在windows下使用的话,建议还是试试esProc,它的计算能力比Pandas还强,更适合windows下使用。
参考技术A

你好,尽管你的问题已经解决了:

    按照出错的顺序,一点一点回溯,直道找到源头;

    在百度上搜索,输入包的名字;

    在Python主页上,搜索。

Python:在 Pandas 中计算两列之间的 tf-idf 余弦相似度时出现 MemoryError

【中文标题】Python:在 Pandas 中计算两列之间的 tf-idf 余弦相似度时出现 MemoryError【英文标题】:Python: MemoryError when computing tf-idf cosine similarity between two columns in Pandas 【发布时间】:2017-08-15 08:47:11 【问题描述】:

我正在尝试计算 Pandas 数据框中两列之间的 tf-idf 矢量余弦相似度。一列包含搜索查询,另一列包含产品标题。余弦相似度值旨在成为搜索引擎/排名机器学习算法的“特征”。

我在 iPython 笔记本中执行此操作,不幸的是遇到了 MemoryErrors,并且在挖掘了几个小时后不知道为什么。

我的设置:

联想 E560 笔记本电脑 Core i7-6500U @ 2.50 GHz 16 GB 内存 Windows 10 使用 anaconda 3.5 内核和所有库的全新更新

因此,我已经根据类似的 *** 问题在一个小型玩具数据集上测试了我的代码/目标:

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from scipy import spatial

clf = TfidfVectorizer()

a = ['hello world', 'my name is', 'what is your name?', 'max cosine sim']
b = ['my name is', 'hello world', 'my name is what?', 'max cosine sim']

df = pd.DataFrame(data='a':a, 'b':b)

clf.fit(df['a'] + " " + df['b'])

tfidf_a = clf.transform(df['a']).todense()
tfidf_b = clf.transform(df['b']).todense()

row_similarities = [1 - spatial.distance.cosine(tfidf_a[x],tfidf_b[x]) for x in range(len(tfidf_a)) ]

df['tfidf_cosine_similarity'] = row_similarities

print(df)

这给出了以下(好!)输出:

                   a                 b  tfidf_cosine_similarity
0         hello world        my name is                 0.000000
1          my name is       hello world                 0.000000
2  what is your name?  my name is what?                 0.725628
3      max cosine sim    max cosine sim                 1.000000

但是,当我尝试将相同的方法应用于尺寸为 186,154 x 5 的数据框 (df_all_export) 时(其中 5 列中有 2 列查询 (search_term) 和文档 (product_title) 是这样的:

clf.fit(df_all_export['search_term'] + " " + df_all_export['product_title'])

tfidf_a = clf.transform(df_all_export['search_term']).todense()
tfidf_b = clf.transform(df_all_export['product_title']).todense()

row_similarities = [1 - spatial.distance.cosine(tfidf_a[x],tfidf_b[x]) for x in range(len(tfidf_a)) ]
df_all_export['tfidf_cosine_similarity'] = row_similarities

df_all_export.head()

我明白了......(这里没有给出整个错误,但你明白了):

MemoryError                               Traceback (most recent call last)
<ipython-input-27-8308fcfa8f9f> in <module>()
     12 clf.fit(df_all_export['search_term'] + " " + df_all_export['product_title'])
     13 
---> 14 tfidf_a = clf.transform(df_all_export['search_term']).todense()
     15 tfidf_b = clf.transform(df_all_export['product_title']).todense()
     16

完全迷失了这一点,但我担心解决方案会非常简单和优雅:)

提前谢谢你!

【问题讨论】:

请始终发布完整的堆栈跟踪,以便我们知道错误的来源。 【参考方案1】:

您仍然可以使用sklearn.metrics.pairwise 方法处理稀疏矩阵/数组:

# I've executed your example up to (including):
# ...
clf.fit(df['a'] + " " + df['b'])

A = clf.transform(df['a'])

B = clf.transform(df['b'])

from sklearn.metrics.pairwise import *

paired_cosine_distances 会告诉你你的字符串有多远或有多不同(“逐行”比较两列中的值)

0 - 表示完全匹配

In [136]: paired_cosine_distances(A, B)
Out[136]: array([ 1.        ,  1.        ,  0.27437247,  0.        ])

cosine_similaritya 列的第一个字符串与b 列中的所有字符串进行比较(第 1 行); a 列的第二个字符串,b 列中的所有字符串(第 2 行)等等...

In [137]: cosine_similarity(A, B)
Out[137]:
array([[ 0.        ,  1.        ,  0.        ,  0.        ],
       [ 1.        ,  0.        ,  0.74162106,  0.        ],
       [ 0.43929881,  0.        ,  0.72562753,  0.        ],
       [ 0.        ,  0.        ,  0.        ,  1.        ]])

In [141]: A
Out[141]:
<4x10 sparse matrix of type '<class 'numpy.float64'>'
        with 12 stored elements in Compressed Sparse Row format>

In [142]: B
Out[142]:
<4x10 sparse matrix of type '<class 'numpy.float64'>'
        with 12 stored elements in Compressed Sparse Row format>

注意:所有计算都使用 sparsed 矩阵 - 我们没有在内存中解压缩它们!

【讨论】:

非常感谢!我实施了您的解决方案,它很有魅力。在等待解决方案时,我尝试了使用列表和其他方法的变通方法,但一无所获。您的解决方案运行良好且快速 :) @Bango,很高兴我能帮上忙 :)【参考方案2】:

借助上面 MaxU 发布的友好帮助和解决方案,我在这里展示了完成我试图完成的任务的完整代码。除了MemoryError tt,当我尝试一些“hacky”解决方法时,tt 还可以避免出现在余弦相似度计算中的奇怪 nan。

注意以下代码是部分 sn-p,因为已在完整代码中构建了尺寸为 186,134 x 5 的大型数据框 df_all_export

我希望这对尝试使用 tf-idf 向量计算搜索查询和匹配文档之间的余弦相似度的其他人有所帮助。对于这样一个常见的“问题”,我很难找到一个用 SKLearn 和 Pandas 实现的明确解决方案。

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import paired_cosine_distances as pcd

clf = TfidfVectorizer()

clf.fit(df_all_export['search_term'] + " " + df_all_export['product_title'])

A = clf.transform(df_all_export['search_term'])
B = clf.transform(df_all_export['product_title'])

cosine = 1 - pcd(A, B)

df_all_export['tfidf_cosine'] = cosine

【讨论】:

以上是关于python在导入pandas时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas read_excel() 将 .xls 文件格式导入 python 时出现 CompDocError

导入 Pandas 时出现 Apache Zeppelin 错误

导入 pandas.plotting 以构建 scatter_matrix 时出现问题

Pandas - 导入大小为 4GB 的 CSV 文件时出现内存错误

使用 pandas Python (pandas.io.parsers.TextFileReader) 从文件中读取数据时出现问题

导入opencv时出现Python3重新链接问题