Реальный вопрос начинающего здесь, но это так просто, я искренне тупик. 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, так что спасибо заранее.
Если вы его проверите, вы увидите в конце вашего 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
, проверьте этот вопрос