2017-04-10 3 views
2

나는 두 개의 열 (실제로 큰)과 같은 매우 유사한 팬더 데이터 프레임이 있습니다문자열을 팬더의 열로 분리하는 방법은 무엇입니까?

ID  |STRING_COL 
ID2309480|#0809890^True^ReP^APPLE 
ID2398403|#0938409^True^POST^GOOGLE 
ID0398240|#0938402^True^POST^VERIZON 

내가 나눌 수있는 방법을 STRING_COL로 :

ID  |NUMBER | VALUE| Accepted| COMPANY 
--------------------------------------------- 
ID2309480|#0809890 | True | ReP  | APPLE 
ID2398403|#0938409 | True | POST | GOOGLE 
ID0398240|#0938402 | True | POST | VERIZON 

tutorial 일부를 읽은 후 이 사이트의 다른 질문은 다음과 같이 나누어 보았습니다.

df = pd.DataFrame(df.STRING_COL.str.split('^',1).tolist(), columns = ['ID','NUMBER', 'VALUES', 'ACCEPTED', 'COMPANY']) 
df 

분명히 t 그것은 나에게 다음 역 추적 반환 이후 자신은 잘못이다 :

AttributeError: 'function' object has no attribute 'str' 

그럼, 어떻게 구분 기호로 ^을 가지고 다른 덩어리에 STRING_COL을 분할을?

UPDATE는

는 또한 노력이 하나

df['STRING_COL'].str.split('^', 1, expand=True) 

하지만

답변

1

두 번째 접근 방식은 바른 길에 있었다 .. 다른 열을 추가하는 방법을 이해하지 않습니다 - 여기에서 다음과 같이 반복하여 열을 지정합니다.

names = ['NUMBER', 'VALUE', 'Accepted', 'Company'] 

new_cols = df['STRING_COL'].str.split('^', expand=True) 

for i, name in enumerate(names): 
    df[name] = new_cols[i] 

df 
Out[43]: 
      ID      STRING_COL  NUMBER VALUE Accepted \ 
0 ID2309480 #0809890^True^ReP^APPLE #0809890 True  ReP  
1 ID2398403 #0938409^True^POST^GOOGLE #0938409 True  POST  
2 ID0398240 #0938402^True^POST^VERIZON #0938402 True  POST  

    Company 
0  APPLE 
1 GOOGLE 
2 VERIZON 
+0

왜 내가 그 추적을 얻었습니까? ... –

+0

또 다른 대체 방법은 무엇입니까? ... –

2

df3에서 원하는 것을 제공해야합니다. pd.concat 메서드를 사용하여 적절한 열을 단일 df에 추가했습니다.

# Using your second method to split the second column (slight variation) 
df2 = df['STRING_COL'].str.split('^', expand=True) 

# Concatenate the proper columns into a single df 
df3 = pd.concat([df[['ID']], df2], axis=1) 

# Rename the columns and turn the VALUE column into type bool 
df3.columns = ['ID', 'NUMBER', 'VALUE', 'Accepted', 'COMPANY'] 
df3.VALUE = df3.VALUE.astype(bool)