Logistic regression that has intercept and coefficient of 0 I created logistic regression model, however my data is very imbalanced (92% vs 7%) so I created both balanced and imbalanced version using sklearn. For my version on the left, I used:
clf = LogisticRegression()

for my weight-balanced version (on the right) I did:
clf = LogisticRegression(class_weight='balanced')

When trying to calculate their Odds ratio, I encountered a confusing discovery that both of them have coefficient and interecept of 0 (or incredibly close to it compare to other models with similar data) while their Odds ratio is 1. Is there a specific reason?

Edit (MRE for left hand graph):
    from sklearn.linear_model import LogisticRegression
    from sklearn.datasets import make_classification
    from sklearn.model_selection import train_test_split
    import matplotlib.pyplot as plt
    from sklearn.metrics import classification_report

    X_train, X_test, y_train, y_test = train_test_split(X, y, 
    test_size=0.2, random_state=0)
    
    # fit the logistic regression model to the training data
    clf = LogisticRegression()
    clf.fit(X_train, y_train)
    # predict the labels for the test set
    y_pred = clf.predict(X_test)
    
    # plot the data points
    plt.scatter(X_train, y_train)

    # plot the logistic regression line
    plt.plot(x_range, y_range, color='red')
    plt.ylabel(y_var)
    plt.title(x_var)
    plt.show()
    print(f"\n Coefficient: {clf.coef_[0][0]} Intercept: {clf.intercept_[0]}\n\n Odds Ratio (OR): {np.exp(clf.coef_)[0][0].round(3)}")

 A: I recreated your model in R after putting the data you provided into two vectors X and Y (since you seem to be concerned about protecting your data, I will not reproduce it here):
model <- glm(Y~X,family="binomial")
plot(X,Y,pch=19,las=1)
X_pred <- seq(min(X),max(X),by=100)
lines(X_pred,predict(model,newdata=data.frame(X=X_pred),type="response"),col="red")


We see that this reproduces the left hand plot in your question. Per my comments, it makes no sense to "balance" data, so we will stick with this model.
A call summary(model) gives this output (snipped):
Coefficients:
              Estimate Std. Error z value Pr(>|z|)
(Intercept) -9.998e-03  1.175e+00  -0.009    0.993
X           -4.867e-05  3.081e-05  -1.580    0.114

The parameter estimate for the X coefficient matches your picture, but the intercept is quite different, -9.998e-03 against -1.209e-09. Since your picture matches this one, I assume you do have the correct parameter estimates and just had a typo in preparing your picture.
Now, why are these parameter estimates so small? That is just the way it is. Your model is fitted in a way to give a good fit for the probability that Y=1, and your predictor is on a scale of tens of thousands (e04), so a regression parameter estimate of -4.867e-05 makes sense when multiplied by your X. And the intercept then follows, given your data. Put differently, the predictions plotted make sense, going from $\hat{P}(Y=1|X=23,300)\approx 0.24$ to $\hat{P}(Y=1|X=58,500)\approx 0.05$ per
predict(model,newdata=data.frame(X=X_pred),type="response")

As to your odds ratios, we don't have enough information. An OR is a ratio between odds, specifically the odds estimated for two different situations, so we need to know which two situations (i.e., values of X) your ORs were calculated based on. For instance, the OR between X=23,300 and X=58500 is 5.55:
$$ \frac{\frac{0.24}{1-0.24}}{\frac{0.05}{1-0.05}}\approx 5.55 $$
In R:
pp <- predict(model,newdata=data.frame(X=c(23300,58500)),type="response")
(odds_ratio <- (pp[1]/(1-pp[1]))/(pp[2]/(1-pp[2])))
#        1 
# 5.546423 

