熊猫单行索引,无需铸造

时间:2018-11-06 15:49:46

标签: python pandas dataframe indexing

索引包含对象(字符串)的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的一行?

2 个答案:

答案 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]