数字后带有减号的 CSV 文件。 “ValueError:无法将字符串转换为浮点数:”

Posted

技术标签:

【中文标题】数字后带有减号的 CSV 文件。 “ValueError:无法将字符串转换为浮点数:”【英文标题】:CSV File with minus sign after number. "ValueError: could not convert string to float:" 【发布时间】:2020-09-16 01:02:39 【问题描述】:

我有几个 CSV 文件,其中一个负数显示在数字后面带有减号(30.50- 而不是 -30.50)。如果我尝试将列转换为整数,Python 会返回 ValueError (ValueError: could not convert string to float: '30.50-')

有人知道如何处理吗?

提前致谢!

最好, 莫里茨

【问题讨论】:

请分享一个带有预期输出的示例输入。 因为30.50- 不是一个有效的数字,你期望它返回什么?您可能需要从右侧剥离 - 并单独处理它 【参考方案1】:

由于您的string 的格式无效,无法转换为float,您首先需要使用rstrip 从右侧删除- 并将其添加到前面以使其正确。 例如:

df = pd.DataFrame('a':['1.5-','1.7','2.0','4.1-'])
df.a.apply(lambda x: '-'+(x.rstrip('-')) if x[-1] =='-' else x).astype(float)
0   -1.5
1    1.7
2    2.0
3   -4.1
Name: a, dtype: float64

【讨论】:

【参考方案2】:

像这样:

In [141]: df = pd.DataFrame('A':['30.50-', '20', '-10.01','22.10-'])
In [142]: df 
Out[142]: 
        A
0  30.50-
1      20
2  -10.01
3  22.10-

In [143]: df['A'] = df['A'].apply(lambda x: '-'+ (x.rstrip('-')) if x.endswith('-') else x).astype(float) 

In [145]: df 
Out[145]: 
       A
0 -30.50
1  20.00
2 -10.01
3 -22.10

In [144]: df.dtypes 
Out[144]: 
A    float64
dtype: object

【讨论】:

它对前几个 CSV 非常有效,但对于一个我收到以下错误消息:“TypeError: 'float' object is not subscriptable”,即使该列的类型是 Pandas type “object ”。当值突然不再有小数点时出现错误(“1.000”现在是“1”)。你知道如何处理吗?

以上是关于数字后带有减号的 CSV 文件。 “ValueError:无法将字符串转换为浮点数:”的主要内容,如果未能解决你的问题,请参考以下文章

带有加号或减号的 DAX 数字格式

使用VBA为负数设置带有千位分隔符、2位小数和减号的标准数字格式?

SAS - 从带有科学计数法数字的csv文件导入时如何保留实际数字

导入包含逗号、千位分隔符和尾随减号的 CSV 数据

Jasper Report 以 CSV 格式导出带有科学计数法的数字

CSV文件保存数字为文本形式后再次打开后数字任然显示为科学计数法的问题?