팬더 / 파이썬에서 데이터 프레임에 두 개의 텍스트 열 결합


486

팬더를 사용하여 Python에서 20 x 4000 데이터 프레임이 있습니다. 이 열 중 두 개는 이름이 Yearquarter입니다. periodmake Year = 2000quarter= q2into 라는 변수를 만들고 싶습니다 2000q2.

누구든지 그걸 도울 수 있습니까?

답변:


530

두 열이 모두 문자열 인 경우 직접 연결할 수 있습니다.

df["period"] = df["Year"] + df["quarter"]

열 중 하나 (또는 ​​둘 다)가 문자열 유형이 아닌 경우 먼저 열을 변환해야합니다.

df["period"] = df["Year"].astype(str) + df["quarter"]

이 작업을 수행 할 때 NaN을주의하십시오!


여러 문자열 열을 조인 해야하는 경우 다음을 사용할 수 있습니다 agg.

df['period'] = df[['Year', 'quarter', ...]].agg('-'.join, axis=1)

여기서 "-"는 구분 기호입니다.


13
모든 열을 입력하지 않고 여러 열을 함께 추가 할 수 있습니까? add(dataframe.iloc[:, 0:10])예를 들어 봅시다 .
Heisenberg

5
@Heisenberg 그것은 파이썬 내장에서 가능해야한다 sum.
silvado

6
@silvado 여러 열을 추가하는 예를 들어 주시겠습니까? 감사합니다
c1c1c1

6
처음에는 문자열이 아닌 모든 열에 map (str)을 적용해야합니다. quarter가 숫자라면 dataframe["period"] = dataframe["Year"].map(str) + dataframe["quarter"].map(str)map은 모든 항목에 문자열 변환을 적용하는 것입니다.
Ozgur Ozturk

13
당신이 유모 값이 IY이 솔루션은 문제를 만들 수 있습니다, 전자주의

269
df = pd.DataFrame({'Year': ['2014', '2015'], 'quarter': ['q1', 'q2']})
df['period'] = df[['Year', 'quarter']].apply(lambda x: ''.join(x), axis=1)

이 데이터 프레임을 생성합니다

   Year quarter  period
0  2014      q1  2014q1
1  2015      q2  2015q2

이 방법 df[['Year', 'quarter']]은 데이터 프레임의 열 슬라이스 로 대체하여 임의의 수의 문자열 열을 일반화합니다 ( 예 :) df.iloc[:,0:2].apply(lambda x: ''.join(x), axis=1).

apply () 메소드에 대한 자세한 정보는 여기에서 확인할 수 있습니다.


20
lambda x: ''.join(x)그냥 ''.join?
DSM

6
@OzgurOzturk : 요점은 lambda x: ''.join(x)건설 의 람다 부분 이 아무것도하지 않는다는 것입니다. lambda x: sum(x)그냥 대신 사용 하는 것과 같습니다 sum.
DSM

4
를 사용할 때 동일한 결과를 확인했습니다 ( ''.join예 :) df['period'] = df[['Year', 'quarter']].apply(''.join, axis=1).
Max Ghenis

1
@Archie joinstr반복 가능한 인스턴스 만 가져옵니다 . 를 사용하여 map모두로 변환 str한 다음를 사용하십시오 join.
John Strood

16
'-'. join (x.map (str))
Manjul

257

작은 데이터 세트 (<150 행)

[''.join(i) for i in zip(df["Year"].map(str),df["quarter"])]

또는 약간 느리지 만 컴팩트합니다.

df.Year.str.cat(df.quarter)

더 큰 데이터 세트 (> 150 행)

df['Year'].astype(str) + df['quarter']

업데이트 : 타이밍 그래프 팬더 0.23.4

여기에 이미지 설명을 입력하십시오

200K 행 DF에서 테스트 해 봅시다.

In [250]: df
Out[250]:
   Year quarter
0  2014      q1
1  2015      q2

In [251]: df = pd.concat([df] * 10**5)

In [252]: df.shape
Out[252]: (200000, 2)

최신 정보: Pandas 0.19.0을 사용한 새로운 타이밍

CPU / GPU 최적화가없는 타이밍 (가장 빠른 속도에서 느린 속도로 정렬) :

In [107]: %timeit df['Year'].astype(str) + df['quarter']
10 loops, best of 3: 131 ms per loop

In [106]: %timeit df['Year'].map(str) + df['quarter']
10 loops, best of 3: 161 ms per loop

In [108]: %timeit df.Year.str.cat(df.quarter)
10 loops, best of 3: 189 ms per loop

In [109]: %timeit df.loc[:, ['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 567 ms per loop

In [110]: %timeit df[['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 584 ms per loop

In [111]: %timeit df[['Year','quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)
1 loop, best of 3: 24.7 s per loop

CPU / GPU 최적화를 사용한 타이밍 :

In [113]: %timeit df['Year'].astype(str) + df['quarter']
10 loops, best of 3: 53.3 ms per loop

In [114]: %timeit df['Year'].map(str) + df['quarter']
10 loops, best of 3: 65.5 ms per loop

In [115]: %timeit df.Year.str.cat(df.quarter)
10 loops, best of 3: 79.9 ms per loop

In [116]: %timeit df.loc[:, ['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 230 ms per loop

In [117]: %timeit df[['Year','quarter']].astype(str).sum(axis=1)
1 loop, best of 3: 230 ms per loop

In [118]: %timeit df[['Year','quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)
1 loop, best of 3: 9.38 s per loop

답변으로 @ anton-vbr


타이밍에서 261과 264의 차이점은 무엇입니까?
Anton Protopopov

@AntonProtopopov는 분명히 아무데도 100ms :)
Dennis Golomazov

@AntonProtopopov, 두 가지 타이밍이 혼합 된 것으로 생각합니다. 하나는 CPU / GPU 최적화를 사용하고 다른 하나는 그렇지 않았습니다. 답변을 업데이트하고 두 가지 타이밍 세트를 모두 넣었습니다.
MaxU

이 .sum () 사용은 실패합니다. 모든 열이 정수인 것처럼 보일 경우 (즉, 문자열 형식의 정수). 대신 팬더가 합산하기 전에 다시 숫자로 변환하는 것 같습니다!
CPBL

@CPBL,이 접근법을 시도하십시오 :df.T.apply(lambda x: x.str.cat(sep=''))
MaxU

157

이 방법 cat().str접근은 이 정말 잘 작동합니다 :

>>> import pandas as pd
>>> df = pd.DataFrame([["2014", "q1"], 
...                    ["2015", "q3"]],
...                   columns=('Year', 'Quarter'))
>>> print(df)
   Year Quarter
0  2014      q1
1  2015      q3
>>> df['Period'] = df.Year.str.cat(df.Quarter)
>>> print(df)
   Year Quarter  Period
0  2014      q1  2014q1
1  2015      q3  2015q3

cat() 예를 들어 연도와 기간에 정수만 있다고 가정하면 다음과 같이 구분 기호를 추가 할 수 있습니다.

>>> import pandas as pd
>>> df = pd.DataFrame([[2014, 1],
...                    [2015, 3]],
...                   columns=('Year', 'Quarter'))
>>> print(df)
   Year Quarter
0  2014       1
1  2015       3
>>> df['Period'] = df.Year.astype(str).str.cat(df.Quarter.astype(str), sep='q')
>>> print(df)
   Year Quarter  Period
0  2014       1  2014q1
1  2015       3  2015q3

여러 열을 조인하는 것은 str.cat()첫 번째 열 (시리즈) 에서 호출 할 매개 변수로 첫 번째 열을 제외한 모든 열을 포함하는 데이터 목록 또는 계열 목록을 전달하는 것입니다 .

>>> df = pd.DataFrame(
...     [['USA', 'Nevada', 'Las Vegas'],
...      ['Brazil', 'Pernambuco', 'Recife']],
...     columns=['Country', 'State', 'City'],
... )
>>> df['AllTogether'] = df['Country'].str.cat(df[['State', 'City']], sep=' - ')
>>> print(df)
  Country       State       City                   AllTogether
0     USA      Nevada  Las Vegas      USA - Nevada - Las Vegas
1  Brazil  Pernambuco     Recife  Brazil - Pernambuco - Recife

팬더 데이터 프레임 / 시리즈에 null 값이있는 경우 NaN 값을 문자열로 바꾸려면 na_rep 매개 변수를 포함해야합니다. 그렇지 않으면 결합 된 열의 기본값은 NaN입니다.


12
이것은 더 나은 방법 (도, 어쩌면 더 효율적) 이상의 것 lambda또는 map; 또한 가장 깨끗하게 읽습니다.
dwanderson

1
@ZakS, 나머지 열을 첫 번째 매개 변수로 시리즈 대신 데이터 프레임으로 전달합니다 str.cat(). 답변을 수정하겠습니다
LeoRochael

어떤 판다 버전을 사용하고 있습니까? ValueError : sep키워드 를 제공 했습니까 ? 팬더 -0.23.4에서. 감사!
Qinqing Liu

@ QinqingLiu, 나는 팬더 -0.23.4로 이것들을 다시 테스트했고 그들은 효과가있는 것 같습니다. 이 sep매개 변수는 연결된 문자열의 부분을 분리하려는 경우에만 필요합니다. 오류가 발생하면 실패한 예를 알려주십시오.
LeoRochael

31

이번에는 string.format ()과 함께 lamba 함수를 사용합니다.

import pandas as pd
df = pd.DataFrame({'Year': ['2014', '2015'], 'Quarter': ['q1', 'q2']})
print df
df['YearQuarter'] = df[['Year','Quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)
print df

  Quarter  Year
0      q1  2014
1      q2  2015
  Quarter  Year YearQuarter
0      q1  2014      2014q1
1      q2  2015      2015q2

이를 통해 문자열이 아닌 문자열로 작업하고 필요에 따라 값을 다시 포맷 할 수 있습니다.

import pandas as pd
df = pd.DataFrame({'Year': ['2014', '2015'], 'Quarter': [1, 2]})
print df.dtypes
print df

df['YearQuarter'] = df[['Year','Quarter']].apply(lambda x : '{}q{}'.format(x[0],x[1]), axis=1)
print df

Quarter     int64
Year       object
dtype: object
   Quarter  Year
0        1  2014
1        2  2015
   Quarter  Year YearQuarter
0        1  2014      2014q1
1        2  2015      2015q2

1
훨씬 빠름 : .apply ( ''. join (x), axis = 1)
Ghanem

19

귀하의 질문에 대한 간단한 답변.

    year    quarter
0   2000    q1
1   2000    q2

> df['year_quarter'] = df['year'] + '' + df['quarter']

> print(df['year_quarter'])
  2000q1
  2000q2

3
경우 실패 Year문자열이 아닌
geher

4
사용df['Year'].astype(str) + '' + df['quarter'].astype(str)
Yedhrab

2
이 솔루션의 요점은 최고 답변과 동일하기 때문에 정확히 무엇입니까?
AMC

14

@silvado 답변이 좋으면 변경 df.map(str)하면 df.astype(str)더 빠릅니다.

import pandas as pd
df = pd.DataFrame({'Year': ['2014', '2015'], 'quarter': ['q1', 'q2']})

In [131]: %timeit df["Year"].map(str)
10000 loops, best of 3: 132 us per loop

In [132]: %timeit df["Year"].astype(str)
10000 loops, best of 3: 82.2 us per loop

12

우리는 당신의 가정하자 dataframeIS를 df열이 YearQuarter.

import pandas as pd
df = pd.DataFrame({'Quarter':'q1 q2 q3 q4'.split(), 'Year':'2000'})

데이터 프레임을보고 싶다고 가정하자.

df
>>>  Quarter    Year
   0    q1      2000
   1    q2      2000
   2    q3      2000
   3    q4      2000

마지막으로 YearQuarter를 다음과 같이 연결하십시오 .

df['Period'] = df['Year'] + ' ' + df['Quarter']

이제 print df 결과 데이터 프레임을 볼 수 있습니다 .

df
>>>  Quarter    Year    Period
    0   q1      2000    2000 q1
    1   q2      2000    2000 q2
    2   q3      2000    2000 q3
    3   q4      2000    2000 q4

연도와 분기 사이의 공백을 원하지 않으면 간단히 제거하여 제거하십시오.

df['Period'] = df['Year'] + df['Quarter']

3
문자열로 지정df['Period'] = df['Year'].map(str) + df['Quarter'].map(str)
Stuber

나는군요 TypeError: Series cannot perform the operation +나도 실행할 때 df2['filename'] = df2['job_number'] + '.' + df2['task_number']또는 df2['filename'] = df2['job_number'].map(str) + '.' + df2['task_number'].map(str).
Karl Baker

그러나 df2['filename'] = df2['job_number'].astype(str) + '.' + df2['task_number'].astype(str)작동했습니다.
Karl Baker

@ KarlBaker, 입력에 문자열이 없다고 생각합니다. 그러나 당신이 알아 낸 것이 기쁘다. dataframe위에서 만든 예제를 보면 모든 열이 strings 임을 알 수 있습니다.
Samuel Nde

이 솔루션의 요점은 최고 답변과 동일하기 때문에 정확히 무엇입니까?
AMC

10

다음은 매우 다재다능한 구현입니다.

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame([[0, 'the', 'quick', 'brown'],
   ...:                    [1, 'fox', 'jumps', 'over'], 
   ...:                    [2, 'the', 'lazy', 'dog']],
   ...:                   columns=['c0', 'c1', 'c2', 'c3'])

In [3]: def str_join(df, sep, *cols):
   ...:     from functools import reduce
   ...:     return reduce(lambda x, y: x.astype(str).str.cat(y.astype(str), sep=sep), 
   ...:                   [df[col] for col in cols])
   ...: 

In [4]: df['cat'] = str_join(df, '-', 'c0', 'c1', 'c2', 'c3')

In [5]: df
Out[5]: 
   c0   c1     c2     c3                cat
0   0  the  quick  brown  0-the-quick-brown
1   1  fox  jumps   over   1-fox-jumps-over
2   2  the   lazy    dog     2-the-lazy-dog

참고 :이 방법은 Python 3에서는 잘 작동하지만 Python 2에서는 문제가 발생합니다.
Alex P. Miller

10

데이터가 데이터 프레임에 삽입되면이 명령으로 문제를 해결할 수 있습니다.

df['period'] = df[['Year', 'quarter']].apply(lambda x: ' '.join(x.astype(str)), axis=1)

이 답변은 더 오래되고 인기있는 답변과 동일합니다 .
AMC

9

더 효율적인

def concat_df_str1(df):
    """ run time: 1.3416s """
    return pd.Series([''.join(row.astype(str)) for row in df.values], index=df.index)

그리고 여기 시간 테스트가 있습니다 :

import numpy as np
import pandas as pd

from time import time


def concat_df_str1(df):
    """ run time: 1.3416s """
    return pd.Series([''.join(row.astype(str)) for row in df.values], index=df.index)


def concat_df_str2(df):
    """ run time: 5.2758s """
    return df.astype(str).sum(axis=1)


def concat_df_str3(df):
    """ run time: 5.0076s """
    df = df.astype(str)
    return df[0] + df[1] + df[2] + df[3] + df[4] + \
           df[5] + df[6] + df[7] + df[8] + df[9]


def concat_df_str4(df):
    """ run time: 7.8624s """
    return df.astype(str).apply(lambda x: ''.join(x), axis=1)


def main():
    df = pd.DataFrame(np.zeros(1000000).reshape(100000, 10))
    df = df.astype(int)

    time1 = time()
    df_en = concat_df_str4(df)
    print('run time: %.4fs' % (time() - time1))
    print(df_en.head(10))


if __name__ == '__main__':
    main()

마지막으로 sum(concat_df_str2)를 사용하면 결과가 단순히 concat이 아니라 정수로 변환됩니다.


+1 깔끔한 솔루션으로 열을 지정할 수도 있습니다 (예 : df.values[:, 0:3]또는) df.values[:, [0,2]].
눈 깃발 천

9

여러 열로 일반화하는 이유는 무엇입니까?

columns = ['whatever', 'columns', 'you', 'choose']
df['period'] = df[columns].astype(str).sum(axis=1)

멋지지만 '-'와 같이 문자열 사이에 구분 기호를 추가하려면 어떻게해야합니까?
Odisseo

@Odisseo이 답변을 참조하십시오 stackoverflow.com/questions/19377969/…
geher

6

사용하여 zip보다 빠르고 될 수있다 :

df["period"] = [''.join(i) for i in zip(df["Year"].map(str),df["quarter"])]

그래프:

여기에 이미지 설명을 입력하십시오

import pandas as pd
import numpy as np
import timeit
import matplotlib.pyplot as plt
from collections import defaultdict

df = pd.DataFrame({'Year': ['2014', '2015'], 'quarter': ['q1', 'q2']})

myfuncs = {
"df['Year'].astype(str) + df['quarter']":
    lambda: df['Year'].astype(str) + df['quarter'],
"df['Year'].map(str) + df['quarter']":
    lambda: df['Year'].map(str) + df['quarter'],
"df.Year.str.cat(df.quarter)":
    lambda: df.Year.str.cat(df.quarter),
"df.loc[:, ['Year','quarter']].astype(str).sum(axis=1)":
    lambda: df.loc[:, ['Year','quarter']].astype(str).sum(axis=1),
"df[['Year','quarter']].astype(str).sum(axis=1)":
    lambda: df[['Year','quarter']].astype(str).sum(axis=1),
    "df[['Year','quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1)":
    lambda: df[['Year','quarter']].apply(lambda x : '{}{}'.format(x[0],x[1]), axis=1),
    "[''.join(i) for i in zip(dataframe['Year'].map(str),dataframe['quarter'])]":
    lambda: [''.join(i) for i in zip(df["Year"].map(str),df["quarter"])]
}

d = defaultdict(dict)
step = 10
cont = True
while cont:
    lendf = len(df); print(lendf)
    for k,v in myfuncs.items():
        iters = 1
        t = 0
        while t < 0.2:
            ts = timeit.repeat(v, number=iters, repeat=3)
            t = min(ts)
            iters *= 10
        d[k][lendf] = t/iters
        if t > 2: cont = False
    df = pd.concat([df]*step)

pd.DataFrame(d).plot().legend(loc='upper center', bbox_to_anchor=(0.5, -0.15))
plt.yscale('log'); plt.xscale('log'); plt.ylabel('seconds'); plt.xlabel('df rows')
plt.show()

6

가장 간단한 해결책 :

일반 솔루션

df['combined_col'] = df[['col1', 'col2']].astype(str).apply('-'.join, axis=1)

질문 특정 솔루션

df['quarter_year'] = df[['quarter', 'year']].astype(str).apply(''.join, axis=1)

.join 전에 따옴표 안에 선호 분리 문자를 지정하십시오.


이것은 더 오래되고 인기있는 답변 과 동일하지 않습니까?
AMC

5

이 솔루션은 DataFrame의 두 열을목록포함 된 단일 열로 압축 하는 중간 단계를 사용 합니다. 이것은 문자열뿐만 아니라 모든 종류의 열 dtype에 적용됩니다.

import pandas as pd
df = pd.DataFrame({'Year': ['2014', '2015'], 'quarter': ['q1', 'q2']})
df['list']=df[['Year','quarter']].values.tolist()
df['period']=df['list'].apply(''.join)
print(df)

결과:

   Year quarter        list  period
0  2014      q1  [2014, q1]  2014q1
1  2015      q2  [2015, q2]  2015q2

다른 dtype이 작동하지 않는 것 같습니다. TypeError : sequence item 1 : 예상 str 인스턴스, float found
Prometheus

먼저 캐스트를 문자열에 적용하십시오. 결합 작업은 문자열에 대해서만 작동합니다
Markus Dutschke

이 솔루션은 두 개의 열을 다른 dtype과 결합하는 데 작동하지 않습니다.이 경우 올바른 솔루션에 대한 내 대답을 참조하십시오.
Good Will

2

많은 사람들이 앞에서 언급했듯이 각 열을 문자열로 변환 한 다음 더하기 연산자를 사용하여 두 문자열 열을 결합해야합니다. NumPy를 사용하면 성능을 크게 향상시킬 수 있습니다.

%timeit df['Year'].values.astype(str) + df.quarter
71.1 ms ± 3.76 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

%timeit df['Year'].astype(str) + df['quarter']
565 ms ± 22.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

numpyified 버전을 사용하고 싶지만 입력 : df2['filename'] = df2['job_number'].values.astype(str) + '.' + df2['task_number'].values.astype(str)-> 출력 : 오류가 발생 TypeError: ufunc 'add' did not contain a loop with signature matching types dtype('<U21') dtype('<U21') dtype('<U21')합니다. job_number와 task_number는 모두 정수입니다.
Karl Baker

두 개의 numpy 배열을 결합하기 때문입니다. numpy 배열과 pandas Series를 결합하면 작동합니다. 로df['Year'].values.astype(str) + df.quarter
AbdulRehmanLiaqat

2

팬더에서 열을 결합하는 가장 좋은 방법은 두 열을 정수로 변환 한 다음 str로 변환하는 것입니다.

df[['Year', 'quarter']] = df[['Year', 'quarter']].astype(int).astype(str)
df['Period']= df['Year'] + 'q' + df['quarter']

두 열을 정수 로 변환 왜 먼저 int로 변환합니까? 그 이상을 제거하면이 솔루션은 현재 최고 답변과 동일합니다.
AMC

2

다음은 열 값 사이의 구분 기호를 사용하여 두 열을 int 및 str 값과 함께 새 열로 연결 / 결합하는 위의 솔루션에 대한 요약입니다. 이 목적을 위해 세 가지 솔루션이 작동합니다.

# be cautious about the separator, some symbols may cause "SyntaxError: EOL while scanning string literal".
# e.g. ";;" as separator would raise the SyntaxError

separator = "&&" 

# pd.Series.str.cat() method does not work to concatenate / combine two columns with int value and str value. This would raise "AttributeError: Can only use .cat accessor with a 'category' dtype"

df["period"] = df["Year"].map(str) + separator + df["quarter"]
df["period"] = df[['Year','quarter']].apply(lambda x : '{} && {}'.format(x[0],x[1]), axis=1)
df["period"] = df.apply(lambda x: f'{x["Year"]} && {x["quarter"]}', axis=1)

감사합니다! 당신의 f-string 솔루션은 내가 찾길 바랐던 것입니다 !!!
leerssej

1

사용하십시오 .combine_first.

df['Period'] = df['Year'].combine_first(df['Quarter'])

이것은 정확하지 않습니다. .combine_first값이 'Year'에 저장 'Period'되거나 Null이면의 값이됩니다 'Quarter'. 두 문자열을 연결하지 않고에 저장합니다 'Period'.
Steve G

이것은 평평하지 않습니다.
AMC

0
def madd(x):
    """Performs element-wise string concatenation with multiple input arrays.

    Args:
        x: iterable of np.array.

    Returns: np.array.
    """
    for i, arr in enumerate(x):
        if type(arr.item(0)) is not str:
            x[i] = x[i].astype(str)
    return reduce(np.core.defchararray.add, x)

예를 들면 다음과 같습니다.

data = list(zip([2000]*4, ['q1', 'q2', 'q3', 'q4']))
df = pd.DataFrame(data=data, columns=['Year', 'quarter'])
df['period'] = madd([df[col].values for col in ['Year', 'quarter']])

df

    Year    quarter period
0   2000    q1  2000q1
1   2000    q2  2000q2
2   2000    q3  2000q3
3   2000    q4  2000q4

0

DataFrame의 assign 메소드를 사용할 수 있습니다 .

df= (pd.DataFrame({'Year': ['2014', '2015'], 'quarter': ['q1', 'q2']}).
  assign(period=lambda x: x.Year+x.quarter ))

-1
dataframe["period"] = dataframe["Year"].astype(str).add(dataframe["quarter"])

또는 값이 [2000] [4]와 같고 [2000q4]를 만들려는 경우

dataframe["period"] = dataframe["Year"].astype(str).add('q').add(dataframe["quarter"]).astype(str)

대체 .astype(str).map(str)도 작동합니다.


이것은 본질적으로 최고 답변과 동일합니다.
AMC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.