DataFrame max () не возвращает max

1

Реальный вопрос начинающего здесь, но это так просто, я искренне тупик. Python/DataFrame новичок.

Я загрузил DataFrame из Листа Google, однако любые графики или попытки вычислений генерируют фиктивные результаты. Код загрузки:

# Setup
!pip install --upgrade -q gspread

from google.colab import auth
auth.authenticate_user()

import gspread
from oauth2client.client import GoogleCredentials

gc = gspread.authorize(GoogleCredentials.get_application_default())

worksheet = gc.open('Linear Regression - Brain vs. Body Predictor').worksheet("Raw Data")

rows = worksheet.get_all_values()

# Convert to a DataFrame and render.
import pandas as pd
df = pd.DataFrame.from_records(rows)

Кажется, что это работает нормально, и данные выглядят правильно загруженными, когда я распечатываю DataFrame но выполнение max() возвращает явно ложные результаты. Например:

print(df[0])
print(df[0].max())

Вывод:

0     3.385
1      0.48
2      1.35
3       465
4     36.33
5     27.66
6     14.83
7      1.04
8      4.19
9     0.425
10    0.101
11     0.92
12        1
13    0.005
14     0.06
15      3.5
16        2
17      1.7
18     2547
19    0.023
20    187.1
21      521
22    0.785
23       10
24      3.3
25      0.2
26     1.41
27      529
28      207
29       85
      ...  
32     6654
33      3.5
34      6.8
35       35
36     4.05
37     0.12
38    0.023
39     0.01
40      1.4
41      250
42      2.5
43     55.5
44      100
45    52.16
46    10.55
47     0.55
48       60
49      3.6
50    4.288
51     0.28
52    0.075
53    0.122
54    0.048
55      192
56        3
57      160
58      0.9
59     1.62
60    0.104
61    4.235
Name: 0, Length: 62, dtype: object
Max: 85

Очевидно, что максимальное значение выхода - это должно быть 6654, а не 85.

Что я делаю неправильно?

Первое сообщение StackOverflow, так что спасибо заранее.

Теги:
dataframe
ipython
gspread

1 ответ

0
Лучший ответ

Если вы его проверите, вы увидите в конце вашего print() что dtype=object. Кроме того, вы заметите, что у вашей Series pandas есть значения " int " вместе со значениями " float " (например, у вас есть 6654 и 3.5 в той же серии).

Это хорошие намеки на то, что у вас есть серия строк, а оператор max здесь сравнивается на основе сравнения строк. Однако вы хотите иметь серию чисел (в частности, floats) и сравнивать на основе сравнения чисел.

Проверьте следующий воспроизводимый пример:

>>> df = pd.DataFrame({'col': ['0.02', '9', '85']}, dtype=object)
>>> df.col.max()
'9'

Вы можете проверить это, потому что

>>> '9' > '85'
True

Вы хотите, чтобы эти значения считались поплавками. Использовать pd.to_numeric

>>> df['col'] = pd.to_numeric(df.col)
>>> df.col.max()
85

Для получения дополнительной информации о сравнении str и int, проверьте этот вопрос

Ещё вопросы

Сообщество Overcoder
Наверх
Меню