Вы можете сделать эти тире NaN.
df = pd.DataFrame({'inds':['AMZN', 'GOOG', 'IBM'],
'P/B':[18.89, 4.32, '-'],
'P/E':[102.68, '-', 11.12],
'PEG':[3.17, 1.62, 3.35]})
df.set_index('inds', inplace=True)
df.index.name = None
df
| | P/B | P/E | PEG | |
|------|-------|--------|------|---|
| AMZN | 18.89 | 102.68 | 3.17 | |
| GOOG | 4.32 | - | 1.62 | |
| IBM | - | 11.12 | 3.35 | |
Затем вы можете заменить тире (и любой другой символ, просто поместите его в квадратные скобки) на
df = df.replace('[-]', np.nan, regex=True)
, который
df
| | P/B | P/E | PEG | |
|------|-------|--------|------|---|
| AMZN | 18.89 | 102.68 | 3.17 | |
| GOOG | 4.32 | NaN | 1.62 | |
| IBM | NaN | 11.12 | 3.35 | |
, поэтому вы можете разделить вещи и значения NaN, тогда
df['P/B'] / df['P/E']
AMZN 0.18397
GOOG NaN
IBM NaN
dtype: float64
Помимо этого, вам просто нужно будет определить подходящую стратегию для вменения значений для анализа, который вы хочу сделать.