我正在处理一个大文本文件(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
我正在使用下面的代码返回每个系列的相关系数,例如!小号_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
语句有关,但我该如何解决?
修改: 这与最大行数有关。有谁知道如何容纳更多行?
答案 0 :(得分:4)
错误消息:
TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
说None
减去int
是一个TypeError。如果你看一下追溯中的倒数第二行,你会发现那里唯一的减法是
max_rows - 4
所以max_rows
必须是None
。如果你潜入/Users/adamg/anaconda/lib/python2.7/site-packages/pandas/core/series.py
,靠近第857行,并问自己max_rows
最终会如何等于None
,你会看到某种方式
get_option("display.max_rows")
必须返回None
。
这部分代码调用_tidy_repr
,用于汇总系列。当您希望pandas显示None
的所有行时,Series
是正确的值。
因此,当max_rows
为None时,不应该达到代码的这一部分。
我做了pull request来纠正这个问题。