【问题标题】:Error converting strings to float in Pandas在 Pandas 中将字符串转换为浮点数时出错
【发布时间】:2020-08-06 04:35:05
【问题描述】:

我从网站上抓取了一些财务数据,并将其存储在 Pandas 数据框中。这些数字存储为字符串,我尝试通过通常的df['Col Name'].astype(float) 命令将其转换为浮点数,但由于原始网站中存在-(破折号)而遇到错误。错误信息是ValueError: could not convert string to float: '-'

我的意图是使用不同列中的值进行计算,所以这是一个明显的障碍。 我还考虑过用0 替换-,但话又说回来,由于除以0 会导致其他错误。

解决这个问题有哪些可能的选择?

Example of the dataframe value:
|      | P/B   | P/E    | PEG  |   |
|------|-------|--------|------|---|
| AMZN | 18.89 | 102.68 | 3.17 |   |
| GOOG | 4.32  | -      | 1.62 |   |
| IBM  | -     | 11.12  | 3.35 |   |

【问题讨论】:

  • df['Col Name'].replace('-','0').astype(float)?
  • 您可能只使用 .strip 来摆脱“-”,您可以编辑您的问题以提供一些字符串示例吗?

标签: python pandas beautifulsoup


【解决方案1】:

您可以将这些破折号设为 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

除此之外,您只需要确定合适的策略来为您想要执行的分析估算值。

【讨论】:

    猜你喜欢
    • 2019-04-15
    • 2017-11-29
    • 1970-01-01
    • 2011-11-25
    • 2016-08-07
    • 2014-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多