索引包含对象(字符串)的Pandas DataFrame的单行将返回对象类型为Series的
。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
索引不包含对象(字符串)的Pandas DataFrame的单行,将返回一个序列,该序列将转换其值。在DataFrame中,列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
这种行为似乎不一致,是吗?
如何在不将整数转换为浮点数的情况下选择第二个DataFrame df2
的一行?
答案 0 :(得分:2)
type
中有多个Series
时,熊猫将使用object
来处理它,如果它是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
答案 1 :(得分:0)
一种解决方法,根据@Michael在评论中发布的stackoverflow链接:
Decimal((df['value1'])).quantize(Decimal("0.01"), decimal.ROUND_HALF_UP)
我的数据框很大,将整个数据框转换为对象需要一段时间。这是一个更快但更灵活的解决方案。
desired_index = 3
df.astype('O').iloc[desired_index]