使用一級方程式資料集——Pandas DataFrame 有一個“constructorID”列,其中的建構式采用全小寫、下劃線格式(如“red_bull”),而“constructor”列的格式正確且大寫(“Red公牛”)。我正在嘗試將顏色編碼和圖例鏈接到“constructor”列,而不是“constructorID”,以獲得更清晰的顯示,因為這是用于最終專案。但是,當“constructorID”按預期顯示圖表時,“constructor”回傳一個 Javascript 錯誤。
constructorID 唯一列值:
array(['williams', 'red_bull', 'toro_rosso', 'mclaren', 'alpine',
'mercedes', 'sauber', 'alphatauri', 'alfa', 'haas', 'renault',
'racing_point', 'ferrari', 'force_india', 'aston_martin'],
dtype=object)
建構式唯一列值:
array(['Williams', 'Red Bull', 'Toro Rosso', 'McLaren', 'Alpine F1 Team',
'Mercedes', 'Sauber', 'AlphaTauri', 'Alfa Romeo', 'Haas F1 Team',
'Renault', 'Racing Point', 'Ferrari', 'Force India',
'Aston Martin'], dtype=object)
我試圖通過創建最簡單的圖表來進行除錯:
alt.Chart(df_year_pts).mark_circle().encode(
color='constructorID:N',
x='driver_yr_pts:Q',
y='constructor_yr_pts:Q'
)
上面的代碼完美運行。
alt.Chart(df_year_pts).mark_circle().encode(
color='constructor:N',
x='driver_yr_pts:Q',
y='constructor_yr_pts:Q'
)
上面的代碼回傳以下錯誤:
Javascript Error: Cannot read properties of undefined (reading 'params')
This usually means there's a typo in your chart specification. See the javascript console for the full traceback.
關于使用“建構式”列作為編碼可能會出現什么問題的任何建議或想法?我真的不知道該列和“constructorID”列之間有什么區別。
編輯:我的資料的最小字典形式樣本,前 5 行:
{'constructor': {0: 'Williams',
1: 'Red Bull',
2: 'Toro Rosso',
3: 'Red Bull',
4: 'McLaren'},
'constructorID': {0: 'williams',
1: 'red_bull',
2: 'toro_rosso',
3: 'red_bull',
4: 'mclaren'},
'constructor_yr_pts': {0: 0.0, 1: 417.0, 2: 85.0, 3: 319.0, 4: 30.0},
'driver': {0: 'Jack Aitken',
1: 'Alexander Albon',
2: 'Alexander Albon',
3: 'Alexander Albon',
4: 'Fernando Alonso'},
'driverID': {0: 'aitken', 1: 'albon', 2: 'albon', 3: 'albon', 4: 'alonso'},
'driver_yr_pts': {0: 0.0, 1: 76.0, 2: 16.0, 3: 105.0, 4: 17.0},
'year': {0: 2020, 1: 2019, 2: 2019, 3: 2020, 4: 2017}}
這是我用來從 Ergast API 讀取資料的基本代碼
import altair as alt
import pandas as pd
from pyergast import pyergast
import requests
rounds_17 = pyergast.get_schedule(2017)
df_2017 = pd.DataFrame()
for i in range(len(rounds_17)):
i = 1
temp = pyergast.get_race_result(2017, i)
temp['year'] = 2017
temp['round'] = i
df_2017 = pd.concat([df_2017, temp], ignore_index=True)
rounds_18 = pyergast.get_schedule(2018)
df_2018 = pd.DataFrame()
for i in range(len(rounds_18)):
i = 1
temp = pyergast.get_race_result(2018, i)
temp['year'] = 2018
temp['round'] = i
df_2018 = pd.concat([df_2018, temp], ignore_index=True)
rounds_19 = pyergast.get_schedule(2019)
df_2019 = pd.DataFrame()
for i in range(len(rounds_19)):
i = 1
temp = pyergast.get_race_result(2019, i)
temp['year'] = 2019
temp['round'] = i
df_2019 = pd.concat([df_2019, temp], ignore_index=True)
rounds_20 = pyergast.get_schedule(2020)
df_2020 = pd.DataFrame()
for i in range(len(rounds_20)):
i = 1
temp = pyergast.get_race_result(2020, i)
temp['year'] = 2020
temp['round'] = i
df_2020 = pd.concat([df_2020, temp], ignore_index=True)
rounds_21 = pyergast.get_schedule(2021)
df_2021 = pd.DataFrame()
for i in range(len(rounds_21)):
i = 1
temp = pyergast.get_race_result(2021, i)
temp['year'] = 2021
temp['round'] = i
df_2021 = pd.concat([df_2021, temp], ignore_index=True)
df_total = pd.concat([df_2017,df_2018,df_2019,df_2020, df_2021], ignore_index=True)
df_total['points'] = pd.to_numeric(df_total['points'])
df_year_pts = df_total.groupby(['driverID','driver','year','constructorID','constructor'])['points'].sum().to_frame('year_pts').reset_index()
s_constructor_yr_pts = df_year_pts.groupby(['constructorID','year'])['year_pts'].sum()
df_year_pts = df_year_pts.merge(s_constructor_yr_pts, how='left',on=['constructorID','year']).rename(columns={'year_pts_x':'driver_yr_pts','year_pts_y':'constructor_yr_pts'})
這df_year_pts就是我在 alt.Chart 中呼叫的內容
uj5u.com熱心網友回復:
這看起來像 Vega 或 Vega-Lite 中的錯誤。這是vega 編輯器中的最小復制:
{
"$schema": "https://vega.github.io/schema/vega-lite/v4.17.0.json",
"data": {"values": [{"constructor": "x"}]},
"mark": "circle",
"encoding": {"color": {"field": "constructor"}}
}
它似乎與有一個名為"constructor". 如果我將該列命名為其他名稱,它會按預期作業。
考慮到這一點,我認為目前最好的解決方法是重命名您的列。
我在這里報告了 Vega-Lite 錯誤:https ://github.com/vega/vega-lite/issues/8125
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/464075.html
標籤:javascript Python 牵牛星 素食主义者
下一篇:如何限制axios獲取請求結果
