Python 无强制转换的单行索引

Python 无强制转换的单行索引,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,对包含对象(字符串)的数据帧的单行进行索引将返回类型为object的序列 df1 = pd.DataFrame({'a': np.arange(3), 'b': np.arange(0.5,3),'c': list('def')}) df1 a b c 0 0 0.5 d 1 1 1.5 e 2 2 2.5 f df1.loc[0] a 0 b 0.5 c d Name: 0, dtype: object 索引不包含对象(字符串)的

对包含对象(字符串)的数据帧的单行进行索引将返回类型为object的序列

df1 = pd.DataFrame({'a': np.arange(3), 'b': np.arange(0.5,3),'c': list('def')})

df1
   a    b  c
0  0  0.5  d
1  1  1.5  e
2  2  2.5  f

df1.loc[0]
a      0
b    0.5
c      d
Name: 0, dtype: object
索引不包含对象(字符串)的数据帧的单行将返回一个系列,该系列将强制转换其值。列
a
在数据帧中的类型为
int64
。结果序列包含列
a
的值作为
float64

df2 = pd.DataFrame({'a': np.arange(3), 'b': np.arange(0.5,3)})

df2
  a    b
0  0  0.5
1  1  1.5
2  2  2.5

df2.loc[0]

a    0.0
b    0.5
Name: 0, dtype: float64
这种行为似乎并不一致,是吗?
如何选择第二个数据帧的一行
df2
,而不将我的int转换为float?

系列中有多个
类型
时,pandas将使用
对象
来处理它,如果它是float和int,它会将int更改为float

df1.loc[0].map(type)
Out[6]: 
a      <class 'numpy.int32'>
b    <class 'numpy.float64'>
c              <class 'str'>
Name: 0, dtype: object
df1.loc[0].映射(类型)
出[6]:
A.
B
C
名称:0,数据类型:对象

根据@Michael在评论中发布的stackoverflow链接,这是一个解决方案:

desired_index = 3

df.astype('O').iloc[desired_index]
我的数据帧很大,将整个数据帧转换为对象需要一段时间。这里有一个更快但更简单的解决方案

df.iloc[[desired_index]].astype('O').iloc[0]

请参阅此处的相关问题:问题是,df2也有不同的类型(int64和float64)。结果系列将我的int64强制转换为float64。@将checkThisOut字符串更改为float不能覆盖它,因此它将转换为object。类型升级到对象