Pandas irow()自动将int转换为float

时间:2016-05-26 09:21:43

标签: python pandas

x = DataFrame([(1,2.0),(2,4.0)], columns=['a','b'])
x.dtypes
a      int64
b    float64
a = x.irow(0)
a
output:
a    1.0
b    2.0
Name: 0, dtype: float64

为什么pandas会自动转换为float?在使用irow后,如何在不使用astype / cast的情况下将int列保留为int?

2 个答案:

答案 0 :(得分:1)

它会为该行返回Series,因此dtype由于float中存在float而被提升为b

In [33]:
type(x.irow(0))

Out[33]:
pandas.core.series.Series

此方法也已弃用,您应该使用iloc

In [31]:
x.iloc[0]

Out[31]:
a    1.0
b    2.0
Name: 0, dtype: float64

实际上,这不是一个真正的问题,因为访问行的特定列将保留dtype

In [36]:
x['a'].iloc[0]

Out[36]:
1

In [37]:
type(x['a'].iloc[0])

Out[37]:
numpy.int64

答案 1 :(得分:0)

您可以使用dtype = object来使用每个数据自己的类型,如下所示

df = pd.read_excel(INPUT_FILE, index_col=0, dtype=object)