CSV-файл со знаком минус после номера. "ValueError: не удалось преобразовать строку в число с плавающей запятой:" - PullRequest
2 голосов
/ 28 мая 2020

У меня есть несколько файлов CSV, где отрицательное число отображается со знаком минус после числа (30,50- вместо -30,50). Если я попытаюсь преобразовать столбец в целое число, Python вернет ValueError (ValueError: could not convert string to float: '30.50-')

Кто-нибудь знает, как с этим справиться?

Заранее спасибо!

Бест, Мориц

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вот так:

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
1 голос
/ 28 мая 2020

Поскольку ваш 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
...