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?
答案 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)