pd.eval将分数转换为浮点和跳过错误(删除错误)

2024-06-26 14:29:09 发布

您现在位置:Python中文网/ 问答频道 /正文

正在尝试我的第一个数据项目,希望对一些交易数据运行k-means,需要您的帮助。我得到了一个包含债券息票的列,但是在“息票列”的不同行中使用了不同的格式。第1行显示“7.2”,而第2行显示“8 1/4”。我需要将其转换为浮动。在谷歌搜索了很多之后,我找到了pd.eval

df.Coupon = df.Coupon.fillna(0).apply(pd.eval)

错误:pd.eval似乎对大多数行都有效,但在这里指出了这个错误:

  *File "C:\Users\Schnexit\anaconda3\lib\ast.py", line 47, in parse
    return compile(source, filename, mode, flags,
  File "<unknown>", line 1
    8 1 /4
      ^
SyntaxError: invalid syntax*

问题: 我假设这是由于“1”和“/”之间的空格造成的。这个假设正确吗?有什么方法可以自动修复此问题,而无需手动处理60k行数据?;) 或者,我只想忽略错误并从数据帧中删除错误行


Tags: 数据项目df格式错误evalline交易
1条回答
网友
1楼 · 发布于 2024-06-26 14:29:09

您需要使一个分数对pd.eval()有效“2 1/2”需要是“2+1/2”

生成一些示例日期以进行演示。包括正斜杠周围的空格填充

import random
import numpy as np

df = pd.DataFrame({"coupon":[f"{random.randint(1,3)} {random.randint(1,4)}{' '[:random.randint(0,1)]}/{' '[:random.randint(0,1)]}{random.randint(1,10)}" for i in range(5)]
                  +[f"{round(random.uniform(1,4),2)}" for i in range(5)] + [np.nan]})

df.assign(couponn=df.coupon.fillna("0").str.replace("[ ]?(/)[ ]?", r"\1", regex=True).str.replace(" ","+").apply(pd.eval))

^{tb1}$

相关问题 更多 >