팬더를 사용하여 문자열 열의 각 값에 문자열 접두사를 추가하다
팬더 데이터 프레임의 상기 열에 있는 각 값의 시작 부분에 문자열을 붙이고 싶습니다.이 방법을 이미 알고 있으며 현재 사용하고 있습니다.
df.ix[(df['col'] != False), 'col'] = 'str'+df[(df['col'] != False), 'col']
이것은 매우 고상한 작업인 것 같습니다.다른 방법을 알고 계십니까(열은 0 또는 NaN인 행에 문자를 추가할 수도 있습니다).
아직 불명확한 경우는, 다음과 같이 하고 싶습니다.
col
1 a
2 0
다음과 같이 입력합니다.
col
1 stra
2 str0
df['col'] = 'str' + df['col'].astype(str)
예:
>>> df = pd.DataFrame({'col':['a',0]})
>>> df
col
0 a
1 0
>>> df['col'] = 'str' + df['col'].astype(str)
>>> df
col
0 stra
1 str0
대체 수단으로, 다음과 같은 기능을 사용할 수도 있습니다.apply
와 조합하여format
예를 들어 접미사를 추가하거나 요소 자체를 조작하고 싶을 때 조금 더 읽기 쉽다는 것을 알 수 있습니다.
df = pd.DataFrame({'col':['a', 0]})
df['col'] = df['col'].apply(lambda x: "{}{}".format('str', x))
또, 다음의 출력도 얻을 수 있습니다.
col
0 stra
1 str0
Python 3.6+ 를 사용하고 있는 경우는, f-string 을 사용할 수도 있습니다.
df['col'] = df['col'].apply(lambda x: f"str{x}")
같은 결과를 얻을 수 있습니다.
f-string 버전은 @RomanPekar의 솔루션(python 3.6.4):
df = pd.DataFrame({'col':['a', 0]*200000})
%timeit df['col'].apply(lambda x: f"str{x}")
117 ms ± 451 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%timeit 'str' + df['col'].astype(str)
112 ms ± 1.04 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
사용.format
단, 실제로는 훨씬 느립니다.
%timeit df['col'].apply(lambda x: "{}{}".format('str', x))
185 ms ± 1.07 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
사용할 수 있습니다.pandas.Series.map
:
df['col'].map('str{}'.format)
이 예에서는 다음 단어를 적용합니다.str
당신의 모든 가치보다 먼저.
테이블 파일을 로딩하는 경우dtype=str
또는 열 유형을 문자열로 변환합니다.df['a'] = df['a'].astype(str)
다음과 같은 접근방식을 사용할 수 있습니다.
df['a']= 'col' + df['a'].str[:]
이 접근법에서는 프리펜드, 추가 및 서브셋 문자열이 허용됩니다.df
.
팬더 v0.23.4, v0.24.1에서 작동합니다. 이전 버전은 알 수 없습니다.
.loc의 다른 솔루션:
df = pd.DataFrame({'col': ['a', 0]})
df.loc[df.index, 'col'] = 'string' + df['col'].astype(str)
이는 위의 솔루션보다 빠르지 않지만(루프당 1ms 이상 느림), 다음과 같은 조건부 변경이 필요한 경우에 도움이 됩니다.
mask = (df['col'] == 0)
df.loc[mask, 'col'] = 'string' + df['col'].astype(str)
CSV 내보내기 시 사람이 읽을 수 있는 값 등의 NaN을 제어하면서 열 접두사에 기여합니다.
"_" + df['col1'].replace(np.nan,'').astype(str)
예:
import sys
import platform
import pandas as pd
import numpy as np
print("python {}".format(platform.python_version(), sys.executable))
print("pandas {}".format(pd.__version__))
print("numpy {}".format(np.__version__))
df = pd.DataFrame({
'col1':["1a","1b","1c",np.nan],
'col2':["2a","2b",np.nan,"2d"],
'col3':[31,32,33,34],
'col4':[np.nan,42,43,np.nan]})
df['col1_prefixed'] = "_" + df['col1'].replace(np.nan,'no value').astype(str)
df['col4_prefixed'] = "_" + df['col4'].replace(np.nan,'no value').astype(str)
print(df)
python 3.7.3
pandas 1.2.3
numpy 1.18.5
col1 col2 col3 col4 col1_prefixed col4_prefixed
0 1a 2a 31 NaN _1a _no value
1 1b 2b 32 42.0 _1b _42.0
2 1c NaN 33 43.0 _1c _43.0
3 NaN 2d 34 NaN _no value _no value
(자세히 말해서 죄송합니다.관련되지 않은 컬럼 타입의 문제에 대해 작업하다가 이 Q를 발견했고, 이것이 제 재생 코드입니다.)
언급URL : https://stackoverflow.com/questions/20025882/add-a-string-prefix-to-each-value-in-a-string-column-using-pandas
'source' 카테고리의 다른 글
PDO가 bool(false) 파라미터를 string("?)으로 변환하는 이유는 무엇입니까? (0) | 2022.09.23 |
---|---|
VueX 스토어가 여러 유닛 테스트에 걸쳐 상태를 유지하는 이유는 무엇입니까? (0) | 2022.09.23 |
Panda DataFrame의 더 많은 열을 보려면 출력 디스플레이를 확대하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
Java의 이중 10진 형식 (0) | 2022.09.22 |
노드 express js의 mysql 행을 동적으로 업데이트하는 방법 (0) | 2022.09.22 |