可能 pandas 错误?
Possible pandas bug?
只是看看 Python/Pandas 中的一些奇怪行为。
我知道设置很复杂,我正在做一些...挑战。
def lucas_n(n):
'''Return the fist n lucas numbers modulo 1_000_007'''
my_list = [1,3]
while len(my_list) < n:
my_list.append((my_list[-1]+my_list[-2])%1_000_007)
return my_list
def f(seq):
'''Look up https://projecteuler.net/problem=739'''
df = pd.Series(seq)
for i in range(len(seq)-1):
df = df.iloc[1:].cumsum()
return df.iloc[0]
x = lucas_n(1e4)
f(x)
>>> -8402283173942682253
简而言之,x
是一个正整数序列,f
应用连续的.iloc[1:].cumsum()
运算。
并且输出为负...
这是一个错误吗?数据类型问题?
您似乎遇到了整数溢出。在 Python 中,整数本身可以具有任意精度,但由于 pandas/numpy 默认使用 C 数据类型,因此可能会发生溢出:
为了解决这个问题,您可能需要手动将数据转换为 Python 个整数:
def f(seq):
'''Look up https://projecteuler.net/problem=739'''
df = pd.Series(seq).astype('int') # Casting to Python integer type
for i in range(len(seq)-1):
df = df.iloc[1:].cumsum()
return df.iloc[0]
这解决了我测试中的溢出问题。
只是看看 Python/Pandas 中的一些奇怪行为。
我知道设置很复杂,我正在做一些...挑战。
def lucas_n(n):
'''Return the fist n lucas numbers modulo 1_000_007'''
my_list = [1,3]
while len(my_list) < n:
my_list.append((my_list[-1]+my_list[-2])%1_000_007)
return my_list
def f(seq):
'''Look up https://projecteuler.net/problem=739'''
df = pd.Series(seq)
for i in range(len(seq)-1):
df = df.iloc[1:].cumsum()
return df.iloc[0]
x = lucas_n(1e4)
f(x)
>>> -8402283173942682253
简而言之,x
是一个正整数序列,f
应用连续的.iloc[1:].cumsum()
运算。
并且输出为负...
这是一个错误吗?数据类型问题?
您似乎遇到了整数溢出。在 Python 中,整数本身可以具有任意精度,但由于 pandas/numpy 默认使用 C 数据类型,因此可能会发生溢出:
为了解决这个问题,您可能需要手动将数据转换为 Python 个整数:
def f(seq):
'''Look up https://projecteuler.net/problem=739'''
df = pd.Series(seq).astype('int') # Casting to Python integer type
for i in range(len(seq)-1):
df = df.iloc[1:].cumsum()
return df.iloc[0]
这解决了我测试中的溢出问题。