xgboost Predictions from R and Python don't match
Solution for posterity: In Python, xgboost requires np.array as input. So this line:

d = xgb.DMatrix(data=[x], missing=np.nan)


should be:

d = xgb.DMatrix(data=np.array([x]), missing=np.nan)