2017-09-11 11 views
1

나는 마약 사용자 연령대의 팬더 DataFrame가 있습니다. 내 문제 : 일부 연령대는 하이픈으로 구분됩니다 (예 : '50-64'). 나는 하이픈 분리 숫자의 평균을 잡고 그것을 셀로 대체하려고합니다.팬더 데이터 프레임에서 하이픈 분리 숫자의 평균을 캡처하는 방법은 무엇입니까?

1. 거기에 루프 또는 메서드의 일종으로 그것을 할 방법이 있습니까? 단순히 하드 코드를하고 싶지 않습니다. drugs.loc[10,'age'] = np.mean(55+64)

2. 나중에 참조 할 수 있도록 하이픈으로 구분 된 숫자로 데이터를 처리하는 좀 더 우아한 방법이 있습니까?

input: 
drugs.age 
output: 
0  12 
1  13 
2  14 
3  15 
4  16 
5  17 
6  18 
7  19 
8  20 
9  21 
10 22-23 
11 24-25 
12 26-29 
13 30-34 
14 35-49 
15 50-64 
16  65+ 

input: 
drugs.age.dtype 
output: 
dtype('O') 

답변

3

당신은 사용할 수 있습니다


drugs['age'] = drugs['age'].str.replace('+','') 
          .str.split('-', expand=True) 
          .astype(float) 
          .mean(axis=1) 
print (drugs) 
    age 
0 12.0 
1 13.0 
2 14.0 
3 15.0 
4 16.0 
5 17.0 
6 18.0 
7 19.0 
8 20.0 
9 21.0 
10 22.5 
11 24.5 
12 27.5 
13 32.0 
14 42.0 
15 57.0 
16 65.0 

일부 값이 숫자이고 일부 문자열은 모든 문자열에 필요한 첫 번째 변환 경우 :

drugs['age'] = drugs['age'].astype(str) 
          .str.replace('+','') 
          .str.split('-', expand=True) 
          .astype(float) 
          .mean(axis=1) 
+2

감사합니다! 이것은 훌륭하게 작동했습니다. expand = True 및 .astype (float)에 대해 배웠습니다 –

+0

다행이 도울 수 있습니다! 좋은 날! – jezrael

+1

이것은 정말 청초한 대답입니다. @jezrael. 한 가지 질문입니다. 확장을 '거짓'으로 설정하면 str.split이 시리즈에서 어떻게 작동하는지 설명해주십시오. 나는 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.str.split.html을보고 있었지만 나는 그것을 얻지 못했다. 고마워 so much – geekidharsh