Pandas 데이터 프레임의 문자열에 선행 0 추가
처음 세 개의 열이 문자열인 판다 데이터 프레임이 있습니다.
ID text1 text 2
0 2345656 blah blah
1 3456 blah blah
2 541304 blah blah
3 201306 hi blah
4 12313201308 hello blah
ID에 선행 0을 추가합니다.
ID text1 text 2
0 000000002345656 blah blah
1 000000000003456 blah blah
2 000000000541304 blah blah
3 000000000201306 hi blah
4 000012313201308 hello blah
시도해 본 결과:
df['ID'] = df.ID.zfill(15)
df['ID'] = '{0:0>15}'.format(df['ID'])
str
속성은 문자열에 대부분의 메서드를 포함합니다.
df['ID'] = df['ID'].str.zfill(15)
더 보기: http://pandas.pydata.org/pandas-docs/stable/text.html
시도:
df['ID'] = df['ID'].apply(lambda x: '{0:0>15}'.format(x))
아니 심지어는
df['ID'] = df['ID'].apply(lambda x: x.zfill(15))
Python 3.6+에서는 f-string도 사용할 수 있습니다.
df['ID'] = df['ID'].map(lambda x: f'{x:0>15}')
성능이 비교 가능하거나 약간 나쁨df['ID'].map('{:0>15}'.format)
반면에, f-string은 더 복잡한 출력을 허용하고 목록 이해를 통해 더 효율적으로 사용할 수 있습니다.
성능 벤치마킹
# Python 3.6.0, Pandas 0.19.2
df = pd.concat([df]*1000)
%timeit df['ID'].map('{:0>15}'.format) # 4.06 ms per loop
%timeit df['ID'].map(lambda x: f'{x:0>15}') # 5.46 ms per loop
%timeit df['ID'].astype(str).str.zfill(15) # 18.6 ms per loop
%timeit list(map('{:0>15}'.format, df['ID'].values)) # 7.91 ms per loop
%timeit ['{:0>15}'.format(x) for x in df['ID'].values] # 7.63 ms per loop
%timeit [f'{x:0>15}' for x in df['ID'].values] # 4.87 ms per loop
%timeit [str(x).zfill(15) for x in df['ID'].values] # 21.2 ms per loop
# check results are the same
x = df['ID'].map('{:0>15}'.format)
y = df['ID'].map(lambda x: f'{x:0>15}')
z = df['ID'].astype(str).str.zfill(15)
assert (x == y).all() and (x == z).all()
초기화하는 동안 한 줄로 수행할 수 있습니다.변환자 인수를 사용합니다.
df = pd.read_excel('filename.xlsx', converters={'ID': '{:0>15}'.format})
그래서 코드 길이를 절반으로 줄일 수 있습니다 :)
PS: read_csv에도 이 인수가 있습니다.
오류가 발생하는 경우:
Pandas 오류: pandas에서 np.object_dtype을 사용하는 문자열 값이 있는 .straccessor만 사용할 수 있습니다.
df['ID'] = df['ID'].astype(str).str.zfill(15)
이 문제에 대한 보다 사용자 정의 가능한 솔루션을 원한다면 시도해 볼 수 있습니다.
df['ID'] = df['ID'].astype(str).str.pad(15, side='left', fillchar='0')
str.zfill(n)
에 해당하는 특수한 경우str.pad(n, side='left', fillchar='0')
방금 저를 위해 일했습니다.
df['ID']= df['ID'].str.rjust(15,'0')
판다의 숫자 열에 선행 0을 추가합니다.
df['ID']=df['ID'].apply(lambda x: '{0:0>15}'.format(x))
ADD 판다의 문자 열에 선행 0을 추가합니다.
방법 1: Zfill 사용
df['ID'] = df['ID'].str.zfill(15)
방법 2: rjust() 함수 사용
df['ID']=df['ID'].str.rjust(15, "0")
출처: https://www.datasciencemadesimple.com/add-leading-preceding-zeros-python/
언급URL : https://stackoverflow.com/questions/23836277/add-leading-zeros-to-strings-in-pandas-dataframe
'programing' 카테고리의 다른 글
Android에서 ListView에 요소를 동적으로 추가하려면 어떻게 해야 합니까? (0) | 2023.07.25 |
---|---|
Dunction2에서 SQL의 YEAR(), MONTH() 및 DAY()를 어떻게 사용할 수 있습니까? (0) | 2023.07.25 |
패키지에 'type: module'이(가) 있는 이유입니다.json 파일? (0) | 2023.07.25 |
오류: 'brew link' 단계가 성공적으로 완료되지 않았습니다. (0) | 2023.07.25 |
Oracle 캐스케이드 삭제 (0) | 2023.07.25 |