Python에서 점과 쉼표가 있는 문자열을 플로트로 변환하려면 어떻게 해야 합니까?
다음과 같은 문자열을 변환하려면 어떻게 해야 합니다.123,456.908
다뜨를 123456.908
파이썬에서?
위해서int
s, 기술은 기본적으로 동일하지만 문자열에 쉼표가 수천 개의 구분 기호로 포함된 경우 문자열을 숫자로 변환하는 방법을 참조하십시오.
현지화 서비스 사용
기본 로케일
도서관locale
모듈은 C 기반 현지화 루틴에 대한 Python의 인터페이스입니다.
기본적인 용도는 다음과 같습니다.
import locale
locale.atof('123,456')
▁where가 있는 로케일에서.,
수천 개의 분리기로 처리되면 반환됩니다.123456.0
에서는 소점으로취로케반서는환다니됩에일는급되수다반니▁return▁in를 반환합니다.123.456
.
그러나 기본적으로 이 기능은 작동하지 않습니다.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.8/locale.py", line 326, in atof
return func(delocalize(string))
ValueError: could not convert string to float: '123,456'
이는 기본적으로 프로그램이 코드가 실행 중인 플랫폼과는 아무런 관련이 없는 "로컬"이지만 대신 POSIX 표준에 의해 정의되기 때문입니다.설명서에서 설명하는 바와 같이,
할 때 처에프시로케은일면작되이입니다.
C
사용자가 선호하는 로케일이 무엇이든 상관없이 로케일을 선택할 수 있습니다.예외가 : 한가예있습다니가외지.LC_CTYPE
시작 시 범주가 변경되어 현재 로케일 인코딩을 사용자가 선호하는 로케일 인코딩으로 설정합니다.의 로케일 .setlocale(LC_ALL, '')
.
하는 것 으로 ", " "라는 이름으로 표시됩니다.locale
모듈은 Python 자체와 동일한 방식으로 데이터를 해석합니다(이름이 지정된 로케일을 통해).C
C 프로그래밍 언어 뒤에 있음). locale.atof
와 동일한 작업을 수행합니다.float
했고, 마찬가지로 문을전달고했, 게하비슷자열▁passed.locale.atoi
흉내를 낼 것입니다.int
.
환경의 로케일 사용
만들기setlocale
설명서의 위 인용문에 언급된 호출은 사용자 환경에서 로케일 설정을 가져옵니다.따라서:
>>> import locale
>>> # passing an empty string asks for a locale configured on the
>>> # local machine; the return value indicates what that locale is.
>>> locale.setlocale(locale.LC_ALL, '')
'en_CA.UTF-8'
>>> locale.atof('123,456.789')
123456.789
>>> locale.atof('123456.789')
123456.789
로케일은 수천 개의 구분 기호가 올바른 위치에 있는지 여부는 상관하지 않습니다. 이 구분 기호는 다음과 같이 인식하고 필터링합니다.
>>> locale.atof('12,34,56.789')
123456.789
3.6 이상에서는 기본 제공 및 변환에서 별도로 처리되는 밑줄에 대해서도 신경 쓰지 않습니다.
>>> locale.atof('12_34_56.789')
123456.789
반면에 문자열 메소드와 f-string은 다음 형식을 사용할 경우 로케일을 인식합니다.
>>> f'{123456.789:.9n}' # `.9` specifies 9 significant figures
'123,456.789'
의 버전전없 없이.setlocale
호출하면 출력에 쉼표가 없습니다.
로케일 명시적 설정
적절한 로케일 이름을 사용하여 임시 로케일 설정을 만들고 이러한 설정을 현지화의 특정 측면에만 적용할 수도 있습니다.들어 숫자에 분석과 숫에대만지역된구문분석및들가예어를면져려오형을,LC_NUMERIC
LC_ALL
에 시대에setlocale
콜.콜.
다음은 몇 가지 예입니다.
>>> # in Denmark, periods are thousands separators and commas are decimal points
>>> locale.setlocale(locale.LC_NUMERIC, 'en_DK.UTF-8')
'en_DK.UTF-8'
>>> locale.atof('123,456.789')
123.456789
>>> # Formatting a number according to the Indian lakh/crore system:
>>> locale.setlocale(locale.LC_NUMERIC, 'en_IN.UTF-8')
'en_IN.UTF-8'
>>> f'{123456.789:9.9n}'
'1,23,456.789'
필요한 로케일 문자열은 운영 체제에 따라 다를 수 있으며 사용하려면 추가 작업이 필요할 수 있습니다.
Python 기으작방돌아가면을 하십시오.C
앞에서 다음과 .locale.setlocale(locale.LC_ALL, 'C')
.
주의사항
로케일을 설정하면 전체적으로 프로그램 동작에 영향을 미치며 스레드가 안전하지 않습니다.만약 그렇다면, 그것은 보통 프로그램의 시작 부분에서 한 번만 이루어져야 합니다.설명서에서 다시 인용하는 내용:
일반적으로 전화하는 것은 좋지 않은 생각입니다.
setlocale()
일부 라이브러리 루틴에서는 부작용으로 전체 프로그램에 영향을 미치기 때문입니다.저장 및 복원은 거의 마찬가지로 비용이 많이 들고 설정이 복원되기 전에 실행되는 다른 스레드에도 영향을 미칩니다.
이 필요한 : 로케일과 사용되는 )
time.strftime()
도 할 수 있는 할 것입니다.), 표준라이브않수지행고수할합찾방다니아야법을있는리러용루틴하사을▁),▁you▁routine합다.더 좋은 것은 로케일 설정을 사용해도 괜찮다는 것을 스스로에게 확신시키는 것입니다.이 비() 야 합니다.C
로케일 설정.
Python 코드가 C 프로그램에 포함된 경우 로케일을 설정하면 C 코드에도 영향을 줄 수 있습니다.
은 내선모호면안됩다니출되듈을 하면 안 .
setlocale()
현재 로케일이 무엇인지 알아내는 것을 제외하고는그러나 반환 값은 복원하는 데만 휴대용으로 사용될 수 있기 때문에 이는 그다지 유용하지 않습니다(로컬이 다음과 같은지 확인하는 경우 제외).C
).
(N.B: 언제setlocale
싱로호니로 됩니다.category
쟁논과 함께 는과함께또께None
빈 문자열이 아님 - 로케일 이름의 경우 아무것도 변경하지 않고 기존 로케일의 이름만 반환합니다.)
따라서 이것은 생산 코드에서 서로 다른 로케일에 사용되는 데이터를 실험적으로 구문 분석하거나 형식을 지정하는 도구로 사용되지 않습니다.위의 예는 시스템 작동 방식을 설명하는 예에 불과합니다.이를 위해 타사 국제화 라이브러리를 찾으십시오.
로케일에 된 경우 하면 데나러가모로특따정에형지케지그면경정을 사용할 수 .locale.atoi
그리고.locale.atof
로의 으로.int
그리고.float
문자열 입력에 대한 호출입니다.
제거하기만 하면 됩니다.,
와 함께replace()
:
float("123,456.908".replace(',',''))
로케일을 모르고 어떤 종류의 숫자라도 구문 분석하려면 이 함수(My repo)를 사용합니다.완벽하지는 않지만 대부분의 경우를 고려합니다.
>>> parseNumber("a 125,00 €")
125
>>> parseNumber("100.000,000")
100000
>>> parseNumber("100 000,000")
100000
>>> parseNumber("100,000,000")
100000000
>>> parseNumber("100 000 000")
100000000
>>> parseNumber("100.001 001")
100.001
>>> parseNumber("$.3")
0.3
>>> parseNumber(".003")
0.003
>>> parseNumber(".003 55")
0.003
>>> parseNumber("3 005")
3005
>>> parseNumber("1.190,00 €")
1190
>>> parseNumber("1190,00 €")
1190
>>> parseNumber("1,190.00 €")
1190
>>> parseNumber("$1190.00")
1190
>>> parseNumber("$1 190.99")
1190.99
>>> parseNumber("1 000 000.3")
1000000.3
>>> parseNumber("1 0002,1.2")
10002.1
>>> parseNumber("")
>>> parseNumber(None)
>>> parseNumber(1)
1
>>> parseNumber(1.1)
1.1
>>> parseNumber("rrr1,.2o")
1
>>> parseNumber("rrr ,.o")
>>> parseNumber("rrr1rrr")
1
를 천 기호로 에는 " " " " " " 를 사용합니다..replace
번 합니다.float
따라서:
s = s.replace('.','').replace(',','.')
number = float(s)
이건 어때요?
my_string = "123,456.908"
commas_removed = my_string.replace(',', '') # remove comma separation
my_float = float(commas_removed) # turn from string to float.
간단히 말해서:
my_float = float(my_string.replace(',', ''))
def text_currency_to_float(text):
t = text
dot_pos = t.rfind('.')
comma_pos = t.rfind(',')
if comma_pos > dot_pos:
t = t.replace(".", "")
t = t.replace(",", ".")
else:
t = t.replace(",", "")
return float(t)
이 함수는 오른쪽에서 문자열에서 해당 위치가 나타나는 위치를 확인하여 쉼표가 천 구분 기호인지 마침표가 십진수 구분 기호인지 탐지합니다. (단, 숫자의 분수 부분에는 천 구분 기호를 사용하면 안 됩니다.)
s = "123,456.908"
print float(s.replace(',', ''))
여기 제가 여러분을 위해 적은 간단한 방법이 있습니다.:)
>>> number = '123,456,789.908'.replace(',', '') # '123456789.908'
>>> float(number)
123456789.908
바벨을 사용할 수 있습니다.
from babel.numbers import parse_decimal
f = float(parse_decimal("123,456.908", locale="en_US"))
가장 짧은 해결책은 아니지만, 완벽함과 흥미를 위해, 만약 당신이 백만 번이나 입증된 기존 기능에 의존하고 싶다면: 당신은 당신의 번호를 String으로 주입함으로써 판다를 활용할 수 있습니다.I/O를 itsread_csv()
함수(C 백엔드가 있어서 변환 기능을 직접 활용할 수 없는 것으로 알고 있습니다.)
>>> float(pd.read_csv(StringIO("1,000.23"), sep=";", thousands=",", header=None)[0])
1000.23
소수점:로, 구분 기호로 에는 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 를 합니다.decimal=","
thousands="."
.
언급URL : https://stackoverflow.com/questions/6633523/how-can-i-convert-a-string-with-dot-and-comma-into-a-float-in-python
'programing' 카테고리의 다른 글
matplotlib에서 x축을 그래프의 맨 위로 이동 (0) | 2023.07.17 |
---|---|
'pip install'을 실행하는 Ubuntu에서 '다음 필수 패키지를 빌드할 수 없습니다: *freetype' 오류가 발생함 (0) | 2023.07.17 |
날짜 문자열을 다른 형식으로 변환하는 방법 (0) | 2023.07.17 |
모든 Mongo 컬렉션을 루프하고 쿼리 실행 (0) | 2023.07.17 |
RGB 색 튜플을 16진수 문자열로 변환 (0) | 2023.07.17 |