Python Pandas:增加最大行数

2 投票
1 回答
921 浏览
提问于 2025-04-18 01:05

我正在处理一个很大的文本文件(有50万行),格式如下:

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 语句有关,但我该怎么解决这个问题呢?

编辑:这和最大行数有关。有没有人知道怎么处理更多的行数?

1 个回答

5

错误信息:

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

意思是说,None 减去一个 int 会出现类型错误。如果你查看错误追踪的倒数第二行,你会发现唯一的减法操作是

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,这个函数是用来总结 Series 的。当你想让 pandas 显示 所有 行的 Series 时,None 是正确的值。所以当 max_rows 是 None 时,这段代码本不应该被执行。

我已经提交了一个 拉取请求 来修正这个问题。

撰写回答