【问题标题】:Python Pandas: Increase Maximum Number of RowsPython Pandas:增加最大行数
【发布时间】:2014-05-14 11:35:38
【问题描述】:

我正在处理一个大文本文件(500k 行),格式如下:

S1_A16
0.141,0.009340221649748676
0.141,4.192618196894668E-5
0.11,0.014122135626540204
S1_A17
0.188,2.3292323316081486E-6
0.469,0.007928706856794138
0.172,3.726771730573038E-5

我正在使用下面的代码来返回每个系列的相关系数,例如S!_A16:

import numpy as np
import pandas as pd
import csv
pd.options.display.max_rows = None
fileName = 'wordUnigramPauseTEST.data'

df = pd.read_csv(fileName, names=['pause', 'probability'])
mask = df['pause'].str.match('^S\d+_A\d+')
df['S/A'] = (df['pause']
              .where(mask, np.nan)
              .fillna(method='ffill'))
df = df.loc[~mask]

result = df.groupby(['S/A']).apply(lambda grp: grp['pause'].corr(grp['probability']))
print(result)

但是,在一些大文件上,这会返回错误:

Traceback (most recent call last):
  File "/Users/adamg/PycharmProjects/Subj_AnswerCorrCoef/GetCorrCoef.py", line 15, in <module>
    print(result)
  File "/Users/adamg/anaconda/lib/python2.7/site-packages/pandas/core/base.py", line 35, in __str__
    return self.__bytes__()
  File "/Users/adamg/anaconda/lib/python2.7/site-packages/pandas/core/base.py", line 47, in __bytes__
    return self.__unicode__().encode(encoding, 'replace')
  File "/Users/adamg/anaconda/lib/python2.7/site-packages/pandas/core/series.py", line 857, in __unicode__
    result = self._tidy_repr(min(30, max_rows - 4))
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

我知道这与print 语句有关,但我该如何解决呢?

编辑: 这与最大行数有关。有谁知道如何容纳更多的行?

【问题讨论】:

  • 这里有一个有用的技巧(如果您使用的是 ipython)是 %debug 并找出问题所在。没有可重复的例子就很难说。
  • 我猜是错误数据,请尝试检查数据的类型...
  • 与数据无关。正如我在编辑中所说,它与最大行数有关。

标签: python numpy pandas


【解决方案1】:

错误信息:

TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'

None 减去int 是一个TypeError。如果您查看回溯中的倒数第二行,您会发现唯一的减法是

max_rows - 4

所以max_rows 必须是None。如果你深入到第 857 行附近的/Users/adamg/anaconda/lib/python2.7/site-packages/pandas/core/series.py 并问自己max_rows 最终如何等于None,你会以某种方式看到

get_option("display.max_rows")

必须返回None

这部分代码调用_tidy_repr,用于总结系列。当您希望 pandas 显示 Series所有行时,None 是设置的正确值。 所以当max_rows 为None 时,这部分代码不应该到达。

我已经创建了一个pull request 来纠正这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多