Pandas Pivot table将float转换为in

2024-10-01 09:20:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我发现pandas在将数据帧转换为pivot表时有奇怪的行为。在

import pandas as pd
df = pd.DataFrame({'car_id': {0: 'Trabant', 1: 'Buick', 2: 'Dodge'}, 'car_order': {0: 2, 1: 1, 2: 14}, 'car_name': {0: 'Trabant', 1: 'Buick', 2: 'Dodge'}, 'car_rank': {0: 111111317.29, 1: 1111112324.0, 2: 1111112324.5}})
table = df.pivot_table(index=['car_id', 'car_name', 'car_order'], columns=[],values=['car_rank'], fill_value='',dropna=True)
print table

df1 = pd.DataFrame({'car_id': {0: 'Trabant', 1: 'Buick', 2: 'Dodge'}, 'car_order': {0: 2, 1: 1, 2: 14}, 'car_name': {0: 'Trabant', 1: 'Buick', 2: 'Dodge'}, 'car_rank': {0: 17.29, 1: 24.0, 2: 24.5}})
table1 = df1.pivot_table(index=['car_id', 'car_name', 'car_order'], columns=[],values=['car_rank'], fill_value='',dropna=True)
print table1

结果输出:

^{pr2}$

你知道为什么在表中的值被转换成int,而对于表1,值保持为float?在

熊猫0.18.0,python 2.7.9


Tags: nameiddataframepandasdfindextableorder
1条回答
网友
1楼 · 发布于 2024-10-01 09:20:58

以下是我对pandas 0.18.0的观察结果:

pandas/tools/pivot.py行定义的源代码:141-142:

if fill_value is not None:
    table = table.fillna(value=fill_value, downcast='infer')

这正是你的旋转测向发生的情况:

^{pr2}$

类型:

In [48]: df.fillna('', downcast='infer').dtypes
Out[48]:
car_id       object
car_name     object
car_order     int64
car_rank      int64
dtype: object

有趣的是,如果正确地使用pivot_table()(即用于旋转),它可以正常工作:

In [81]: df.pivot_table(index=['car_id', 'car_order'], columns=['car_name'], values=['car_rank'],dropna=True, fill_value='')
Out[81]:
                       car_rank
car_name                  Buick         Dodge      Trabant
car_id  car_order
Buick   1         1111112324.00
Dodge   14                      1111112324.50
Trabant 2                                     111111317.29

我还是不明白为什么你用这种奇怪的方式使用pivot_table-你要达到什么目的?在

相关问题 更多 >