2017-09-23 2 views
1

다음과 같은 csv 파일이 있습니다 (예 : 2 = 월요일, 3 = 화요일 등 일요일을 참조하므로 방문을 집계 할 수 없음)열의 숫자를 별도의 열의 숫자로 나누기

enter image description here

각 열을 별도의 열로 표시하도록 "방문수"열을 분할하고 싶습니다. 이런 식으로 뭔가 :

enter image description here

가 어떻게 파이썬이 할 수 있습니까? 숫자의 수만큼의 열을 갖고 싶습니다. 1000 행이 있습니다.

이 코드가 시작되었지만 제대로 작동하지 않았습니다.

import pandas as pd 
file=pd.read_csv('file.csv') 

data = [] 
with open('file.csv', 'r') as fh: 
for line in fh: 
data.append(line.split()) 

data = dict(zip(*data)) 
d = { v for in [int(c)]) 
data['visits'][1:])]} 
d['ID'] = data['ID'] 
d['visits'] = data['visits'][0] 
data = pd.DataFrame(d) 
+0

우선 : 자릿수가 항상 같은가요? 그렇지 않은 경우 다른 작업 (예 : 해당 열에 함수를 적용)을 원할 수 있습니다. – pazqo

+0

@pazqo 그것을 보면서, 나는 아니오라고 말할 것입니다. 그것은 큰 파일 (1000 행)입니다. 그래서 파이썬을 사용하고 싶습니다. – Supern92

+0

숫자 또는 _numbers_를 (를) 분할 하시겠습니까? 숫자를 나누는 것은 무의미한 것처럼 보입니다. 또한 일부 데이터를 텍스트로 붙여 넣을 수 있습니까? 인기있는 믿음과는 달리 그림이 도움이되지 않습니다. –

답변

3

사용 str.split :

df 

    ID  visits 
0 1 12 1 40 50 
1 2 56 2 567 34 
2 3 4 5 345 78 

visits = df['visits'].str.split(expand=True).add_prefix('visit_')  
visits 

    visit_0 visit_1 visit_2 visit_3 
0  12  1  40  50 
1  56  2  567  34 
2  4  5  345  78 

다음, IDvisits을 연결 :

df = pd.concat([df[['ID']], visits], 1)  
df 

    ID visit_0 visit_1 visit_2 visit_3 
0 1  12  1  40  50 
1 2  56  2  567  34 
2 3  4  5  345  78 

별도로 각 숫자의 각 자리를 원하는 경우에, 당신은 것 체인입니다 df.apply 전화를 . 또한 80으로 바꾸려면 df.replace을 사용하십시오. 각 열은 문자열 컬럼 (object 유형)이다

visits = df['visits'].str.replace('\s+', '')\ 
      .apply(lambda x: pd.Series(list(x))).add_prefix('visit_')\ 
      .replace('[89]', 0, regex=True) 
visits 

    ID visit_0 visit_1 visit_2 visit_3 visit_4 visit_5 visit_6 visit_7 
0 1  1  2  1  4  0  5  0  NaN 
1 2  5  6  2  5  6  7  3  4 
2 3  4  5  3  4  5  7  0  NaN 

참고. 그러나 정수로 사용하려면 NaN을 제거해야합니다. NaN 열을 삭제해도 문제가 없으면이 솔루션을 사용하면 약간의 작업이 간단 해집니다.

visits = df.visits.str.replace('\s+', '')\ 
      .apply(lambda x: pd.Series(list(x)))\ 
      .dropna(axis=1).add_prefix('visit_').astype(int) % 8 
visits 

    visit_0 visit_1 visit_2 visit_3 visit_4 visit_5 visit_6 
0  1  2  1  4  0  5  0 
1  5  6  2  5  6  7  3 
2  4  5  3  4  5  7  0 

당신은 여전히 ​​df.IDpd.concat을 사용하여 visits을 연결해야합니다.