========================更新#2 ======================= =======================
多么美好的一天。我进展非常缓慢。但是,虽然 PANDAS 非常快速和强大,但它有一个陡峭的学习曲线,并且没有很好的例子(至少对于我正在尝试做的事情)。
最新一期是关于特定行的:
catfile = infile[infile['dtu_topic_split'].map(lambda x: any(targetcat in x))]
它适用于 IPyNotebook,但不适用于 Ubuntu 和 python 2.7
这是Ubuntu上的错误:
Traceback (most recent call last):
File "scikit2.py", line 27, in <module>
catfile = infile[infile['dtu_topic_split'].map(lambda x: any(targetcat in x))]
File "/usr/local/lib/python2.7/dist-packages/pandas-0.11.0-py2.7-linux-x86_64.egg/pandas/core/series.py", line 2408, in map
mapped = map_f(values, arg)
File "inference.pyx", line 861, in pandas.lib.map_infer (pandas/lib.c:41822)
File "scikit2.py", line 27, in <lambda>
catfile = infile[infile['dtu_topic_split'].map(lambda x: any(targetcat in x))]
TypeError: 'bool' object is not iterable
和 iPyNotebook 中的工作代码 + 结果
targetcat = 'Financial Services Industries'
#targetcat = 'Payroll & Employment Tax'
criterion = foo[foo['dtu_topic_split'].map(lambda x: any(targetcat in x))]
print criterion[['dtu_docid','dtu_topic_split']][:10]
dtu_docid dtu_topic_split
9 2010-0185 [Financial Services Industries]
17 2010-0152 [Financial Services Industries, International ...
46 2012-1421 [Financial Services Industries, Payroll & Empl...
49 2012-1413 [Financial Services Industries, Payroll & Empl...
66 2012-1370 [Energy Taxation, Financial Services Industrie...
94 2009-1786 [Financial Services Industries]
144 2012-1170 [Financial Services Industries, Real Estate]
163 2012-1101 [Financial Services Industries, Real Estate]
170 2009-1386 [Financial Services Industries]
249 2012-0754 [Expatriate Taxation, Financial Services Indus...
这是 iPYNotebook 的 python 版本
print sys.version
2.7.4 (default, Apr 19 2013, 18:28:01)
[GCC 4.7.3]
并来自 Ubuntu:
>>> import sys
>>> print sys.version
2.7.4 (default, Apr 19 2013, 18:28:01)
[GCC 4.7.3]
>>>
需要帮忙。如果我使用传统处理,我确信我可以完成这个数据设置和修饰。仍在尝试 PANDAS,但这是艰难的雪橇,最可悲的是我什至不确定为什么我要工作的东西有效。这些类型的错误会滋生挫败感
======================== 更新#1 ======================= =======================
使用第一个答案中的信息(感谢 tshauck)我找到了一种解决问题的方法:
targetcat = 'International Taxation'
criterion = foo[foo['dtu_topic_split'].map(lambda x: any(targetcat in x))]
这会产生 targetcat 在 dataframe.dtu_topic_split 系列中的行列表。鉴于我是熊猫新手,这是最好的处理方式。我的目的是为 30-50 个类别中的每个类别构建单独的培训模块。我不确定是否应该以更传统的 python 样式迭代大约 100K 记录,或者使用 pandas 技术。再次,任何替代方案或建议将不胜感激。
我是 Pandas 的新手,正在努力学习如何利用强大的功能。我昨天发布了一个通过构建单独的数据框来解决这个问题的策略。阅读更多后,我不确定它是最有效的。我已经尝试了几种技术来根据数据帧的系列字段中特定值的存在来选择数据帧中的特定行。以下是数据示例和我的尝试。
print foo[['dtu_docid','dtu_topic_split']]
/home/davidwaldrop/Dropbox/Miscelaneous/E&Y M&C Project/scikit training
dtu_docid dtu_topic_split
0 2012-1553 [Energy Taxation, State & Local Taxation]
1 2012-1552 [Legislation & Policy, Financial Services]
2 2010-0227 [Quantitative Economics and Statistics]
3 2010-0215 [International Taxation, Asia]
4 2012-1529 [Ernst & Young Newsletters, This Week in Tax R...
这是我现在正在做的事情,但无济于事:
targetcat = ['International Taxation']
criterion = foo['dtu_topic_split'].map(lambda x: x == targetcat)
print foo[criterion]
Empty DataFrame
Columns: [id, dtu_docid, dtu_topic, dtu_content, dtu_topic_split]
Index: []
我想要的是一个数据框,其中包含“国际税收”在存储在字段 dtu_topic_split 中的系列中的记录,或者在上面的示例中,foo[3] 中的记录具有 [国际税收,亚洲] 的 dtu_topic_split 值。
正如我所提到的,我真的在努力学习 Pandas,并认为它非常强大。作为一个新手,不仅要找到一种方法来做我想做的事,而且要找到最好的方法以及理性是非常困难的。我的直觉告诉我,这可能最好通过索引来完成,但我什至还没有使用该功能。任何见解都非常感谢。