2016-10-30 7 views
0

에서 조작 팬더를 사용하여 dataframe을 만들려면 같은 그 예를이 때마다 라일라, 우리는에 속하고 두 번째 열 단지를 그림과 같이 추가 가장 올바른 이름을 반환하는파일에서 읽고 난 텍스트 파일을 파이썬

item0 (country, people) 
item1 (sandra , samar) 

때문에 이 경우 (국가, 사람) 인 bove를 호출하고 layla를 item0 및 데이터 프레임의 인덱스로 호출했습니다. 나는 이것을 준비하는 것처럼 보일 수 없다. 그리고 나는 "^"다음에 무엇이든 복제 된 것을 반환하고 그것의 가장 적절한 이름의 목록을 반환하는 논리를 어떻게 수행해야할지 모른다. 내 시험은 지금까지 정말하지 않는 것입니다 : A와 파일에서

level country^layla 
hello sandra^organization 
hello people^layla 
hello samar^organization 

당신이 얻을 수있는 데이터 :

def text_file(file): 

    list=[] 
    file_of_text = "text.txt" 
    with open(file_of_context) as f: 
     for l in f: 
       l_dict = l.split(" ") 
       list.append(l_dict) 
    return(list) 

def items(file_of_text): 

    list_of_items= text_file(file_of_text) 
    for a in list_of_items: 
     for b in a: 
      if a[-1]== 



def main(): 

    file_of_text = "text.txt" 

if __name__ == "__main__": 
    main() 
+0

에 새 열을 만들기 나중에

g = df.groupby('B')['A'].apply(tuple).reset_index() print(g) B A 0 layla (country, people) 1 organization (sandra, samar) 

을 사용할 수 있도록 우리는 인덱스를 다시 설정하라는 것 , 원하는 출력은 무엇입니까? – Abdou

답변

0

당신의 구분 기호로 read_csv() 지정 '^'팬더 시작하고 우리는 우리가 원하는 값을 얻기 위해 분할 임의의 열 이름

df = pd.read_csv('data.csv', delimiter='\^', names=['A', 'B']) 
print (df) 
       A    B 
0 level country   layla 
1 hello sandra  organization 
2 hello people   layla 
3 hello samar  organization 

를 사용하여. 그 확대 인수는 팬더에서 새로운 것입니다. 나는 믿습니다.

df['A'] = df['A'].str.split(' ', expand=True)[1] 
print(df) 
     A    B 
0 country   layla 
1 sandra organization 
2 people   layla 
3 samar organization 

그런 다음, 열 B를 그룹화하고 튜플 기능을 적용합니다. 참고 : 우리가 문자열 '항목을'인덱스 당신이 당신의 파일에 더 많은 텍스트를 추가 한 이제

g['item'] = 'item' + g.index.astype(str) 
    print (g[['item','A']]) 
     item     A 
    0 item0 (country, people) 
    1 item1 (sandra, samar) 
+0

typeError : split() 예기치 않은 키워드 인수가 '확장'되어있어 확장을 사용하지 않아도됩니까? – Lelo

+0

그래, 너는'df [ 'A'] = df [ 'A']와 같은 것을 쓸 수있다. map (lambda x : x.split() [1])' –

+0

너는 처음 df 안에 항상 2 단어 ? 이것은 바뀔 수 있고 하나, 둘 또는 셋 또는 그 이상을 가질 수 있으므로 어쨌든이를 피하기 위해 오류가 발생 했습니까? – Lelo

0

이의 다음과 같은 파일이 file_of_text.txt에게 전화를 포함한다고 가정하자 다음 코드 줄을 사용하여 원하는 출력과 유사 dataframe :

아이디어는 텍스트 파일에서 라인을 읽는 것입니다 다음를 사용하여 각 행을 분할
import re 
import pandas as pd 

def main(myfile): 
    # Open the file and read the lines 
    text = open(myfile,'r').readlines() 

    # Split the lines into lists 
    text = list(map(lambda x: re.split(r"\s[\^\s]*",x.strip()), text)) 

    # Put it in a DataFrame 
    data = pd.DataFrame(text, columns = ['A','B','C']) 

    # Create an output DataFrame with rows "item0" and "item1" 
    final_data = pd.DataFrame(['item0','item1'],columns=['D']) 

    # Create your desired column 
    final_data['E'] = data.groupby('C')['B'].apply(lambda x: tuple(x.values)).values 

    print(final_data) 

if __name__ == "__main__": 
    myfile = "file_of_text.txt" 
    main(myfile) 

모듈 re에서3210 방법. 그 결과는 DataFrame 방법으로 전달되어 data이라는 데이터 프레임을 생성합니다.이 데이터 프레임은 원하는 데이터 프레임 final_data을 생성하는 데 사용됩니다. 결과는 다음과 같아야합니다.

# data 

     A  B    C 
0 level country   layla 
1 hello sandra organization 
2 hello people   layla 
3 hello samar organization 


# final_data 

     D     E 
0 item0 (country, people) 
1 item1 (sandra, samar) 

이 경우 스크립트를 살펴보고 추가 질문이 있으면 꼭보십시오.

이 정보가 도움이되기를 바랍니다.

+0

파일의 줄 길이가 매번 변경되면 어떻게됩니까? – Lelo

+0

파일의 각 줄이 바뀔 때마다 일치하는 데이터를 제공하십시오. – Abdou

+0

"^"앞에 2 단어 만있는 것으로 가정하고 있습니다.이 단어는 다를 수 있지만 .. 어떻게 조정합니까? – Lelo

관련 문제