csv ValueError:无法将字符串转换为浮点型:'金额'

z18hc3ub  于 2023-03-27  发布在  其他
关注(0)|答案(1)|浏览(160)

我有一个dataframe,其中transaction_id,created_at和类型为float的amount列。我将is dataframe写入csv,然后想通过以下pd.read_csv代码加载它。它一直显示错误:无法将字符串转换为浮点数。

feature_columns_dtype = {
'transaction_id'                     :'object',
'created_at'                         :'object' ,
'amount'                             :'float64'}

label_column_dtype = {"is_fraud": "int64"}

raw_data = [
        pd.read_csv(
            file,
            header=None,
            names=feature_columns_names + [label_column],
            dtype=merge_two_dicts(feature_columns_dtype, label_column_dtype),
            skiprows=[1],
            low_memory=False
        )
        for file in input_files
    ]
    concat_data = pd.concat(raw_data)

我已经检查了原始的 Dataframe ,并确保强制执行正确的数据类型,并且'amount'列被转换为np.float64。
我删除了NAs,删除了第一行数据,并在read_csv中添加了low_memory = false选项,就像以前对类似问题的回答中所建议的那样,但错误仍然存在。
有什么线索导致这个错误吗?

db2dz4w8

db2dz4w81#

即使你确信amount dtype是正确的,也会出现错误。我提出了一个解决方案,使用pd.read_csv函数的converters参数来调试错误值:
data.csv

1,2023-03-21,$1000,1
2,2023-03-21,500,0

注意,第一行的第三列包含一个前导$,所以它不能被转换为float。

def check_amount(amount):
    try:
        return float(amount)
    except ValueError:
        print(f'"{amount}" cannot be converted to float')

df = pd.read_csv(
            'data.csv',
            header=None,
            names=feature_columns_names + [label_column],
            dtype=merge_two_dicts(feature_columns_dtype, label_column_dtype),
            skiprows=[1],
            low_memory=False
            converters={'amount': check_amount}
    )

输出:

"$1000" cannot be converted to float

相关问题