Python Pandas - Вывод сводной таблицы неожиданно всплывает - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть фрейм данных, который содержит целые числа, однако, когда я его поворачиваю, он создает числа с плавающей точкой, и я не могу понять, почему:

Мой Dataframe (dfDis) выглядит так:

    Year    Type                                                Total
0   2006    A talk or presentation                                 34
1   2006    A magazine, newsletter or online publication           33
2   2006    A formal working group, expert panel or dialogue        2
3   2006    Scientific meeting (conference/symposium etc.)         10
4   2006    A press release, press conference or response ...       6
....

Мой сводный код:

dfDisB = pd.pivot_table(dfDis, index=['Year'], columns = ['Type'],fill_value=0)

И по какой-то причине dfDisB заканчивается так (извините за форматирование, я надеюсь, вы поняли суть):

    Total
Type    A broadcast e.g. TV/radio/film/podcast (other than news/press)  A formal working group, expert panel or dialogue    A magazine, newsletter or online publication    A press release, press conference or response to a media enquiry/interview  A talk or presentation  Engagement focused website, blog or social media channel    Participation in an activity, workshop or similar   Participation in an open day or visit at my research institution    Scientific meeting (conference/symposium etc.)
Year                                    
2006    1.000000    1.571429    6.125000    2.000000    3.235294    1.000000    4.222222    1.000000    5.500000
2007    0.000000    3.666667    24.500000   11.500000   32.250000   1.000000    5.250000    2.500000    28.000000
2008    0.000000    2.500000    21.333333   13.000000   38.230769   1.000000    7.909091    1.000000    37.000000

Я в замешательстве, так как в моем отчете ранее были указаны другие данные, но у меня нет проблемы.

Есть предложения? Я экспортировал dfDis в csv, чтобы проверить, что там нет поплавков и нет, это просто целые числа.

Спасибо

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Чтобы понять это поведение, обратите внимание:

  1. Метод агрегирования по умолчанию для pd.pivot_table - «среднее».
  2. Среднее 3 целых числа часто не является целым числом.
  3. Если любое из значений в сводной таблице равно float [включая NaN], все , то серии значений преобразуются в float.

Ниже приведены минимальные примеры.

Преобразование в плавающее срабатывание

df = pd.DataFrame({'A': [1, 2, 1, 2, 1, 1, 2, 1],
                   'B': ['a', 'b', 'a', 'c', 'b', 'c', 'a', 'a'],
                   'C': [1, 2, 3, 4, 5, 6, 7, 4]})

df = pd.pivot_table(df, index='A', columns=['B'], values='C', aggfunc='mean')

print(df)

B         a    b    c
A                    
1  2.666667  5.0  6.0
2  7.000000  2.0  4.0

Преобразование в плавающее не сработало

df = pd.DataFrame({'A': [1, 2, 1, 2, 1, 1, 2, 1],
                   'B': ['a', 'b', 'a', 'c', 'b', 'c', 'a', 'a'],
                   'C': [1, 2, 3, 4, 5, 6, 7, 5]})

df = pd.pivot_table(df, index='A', columns=['B'], values='C', aggfunc='mean')

print(df)

B  a  b  c
A         
1  3  5  6
2  7  2  4
0 голосов
/ 30 апреля 2018

Функция агрегирования по умолчанию, используемая pivot_table () : mean.

Скорее всего, это вызывает значения с плавающей точкой.

Демо-версия:

In [49]: df
Out[49]:
   Year                                              Type  Total
0  2006                            A talk or presentation     34
1  2006                            A talk or presentation      1  # <--- NOTE !!!
2  2006      A magazine, newsletter or online publication     33
3  2006  A formal working group, expert panel or dialogue      2
4  2006    Scientific meeting (conference/symposium etc.)     10
5  2006     A press release, press conference or response      6

In [50]: df.pivot_table(index=['Year'], columns = ['Type'],fill_value=0)
Out[50]:
                                                Total                                               \
Type A formal working group, expert panel or dialogue A magazine, newsletter or online publication
Year
2006                                                2                                           33


Type A press release, press conference or response A talk or presentation Scientific meeting (conference/symposium etc.)
Year
2006                                             6                   17.5                                             10
...