Python dataframe replace防止在提供int64值时替换不正确的int32字段

Python dataframe replace防止在提供int64值时替换不正确的int32字段,python,pandas,numpy,Python,Pandas,Numpy,问题:如何替换数据帧中所有特定的int64值,但避免错误地替换不相等的int32值 当提供较大的int64值时,Dataframe错误地替换int32值。 下面我创建了一个最小值示例,在这个示例中,我希望将所有字段的值都替换为-1。假设所有数据均为零,则不应更新任何内容。 但是,列“a”在替换后变为-1 import pandas import numpy dtype = [('a','int32'), ('b','int64'), ('c','float32')] index = ['x',

问题:如何替换数据帧中所有特定的int64值,但避免错误地替换不相等的int32值

当提供较大的int64值时,Dataframe错误地替换int32值。 下面我创建了一个最小值示例,在这个示例中,我希望将所有字段的值都替换为-1。假设所有数据均为零,则不应更新任何内容。 但是,列“a”在替换后变为-1

import pandas
import numpy
dtype = [('a','int32'), ('b','int64'), ('c','float32')]
index = ['x', 'y']
columns = ['a','b','c']
values = numpy.zeros(2, dtype=dtype)
df2 = pandas.DataFrame(values, index=index)
df2.replace(-9223372036854775808, -1)
输出为:

     a  b     c
x   -1  0   0.0
y   -1  0   0.0
编辑:

看起来numpy会向下转换类型,但问题仍然是如何在数据帧转换中避免它? 注:-9223372036854775808为十六进制80000000000000

x = numpy.array(-9223372036854775808, dtype='int64')
print('as int32: ', x.astype(numpy.int32))
#produces
#('as int32: ', array(0, dtype=int32))

您正确地观察到问题是由类型变窄引起的。为什么不只替换具有匹配或至少足够宽的数据类型的列

df2[['b','c']].replace(-9223372036854775808, -1, inplace=True)

我相信这个例子更简单:
ds=pandas.Series([0,0,0],dtype='int32');ds.replace(-9223372036854775808,-1)
在现实生活中,我有一个包含大量随机列的大数据帧,我希望避免在单个列上迭代,因此不需要迭代。获取所有感兴趣列的列表:
int64cols=df2.columns[df2.dtypes=='int64']
,然后仅更新它们:
df2[int64cols]。替换(-9223372036854775808,-1,inplace=True)
。或者,将所有int32列升级为int64。这不会有什么坏处,只是框架需要更多的空间。第二个建议是获取所有“键入”列的列表,这对我来说很有用,只是做了一点小小的调整。我接受答案。