아래와 같은 구조의 텍스트 파일이 있는데, 파이썬을 사용하여 데이터 프레임에서 데이터를 추출하고 싶습니다. Dataframe에는 각 PMID에 대해 Author에 대해 나타나는 모든 텍스트와 함께 PMID가 있어야합니다.
데이터 형식
PMID- 고유 한 8 자리 숫자
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- text (might be multiple lines)
AUTHOR- text(might be multiple lines)
PMID- unique 8digit number
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- text (might be multiple lines)
AUTHOR- 텍스트 (여러 줄일 수 있음)
파이썬에서 시도한 코드는 다음과 같습니다. 모든 PMID를 추출 할 수 있지만 각 PMID에 대해 모든 작성자 텍스트를 첨부하는 논리를 파악할 수 없습니다.
for lines in open('pubmed-cancerbiol.txt','r'):
if(lines[0:4] == 'PMID'):
print(lines)
해결 방법
PMID
를 키로, AUTHOR
를 값으로 사용하여 사전에서 데이터를 수집 할 수 있습니다.
파일로 시작한다고 가정 해 보겠습니다.
from io import StringIO
fo = StringIO(
'''PMID- 12345678
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- author1
AUTHOR- author2
PMID- 12345679
xyz - text (might be multiple lines)
xyz- text (might be multiple lines)
AUTHOR- author3
AUTHOR- author4''')
# with open(filename, 'r') as fo:
그런 다음 줄을 반복하고 사전을 채 웁니다.
records = dict()
pmid = None
for line in fo.readlines():
if line.startswith('PMID-'):
pmid = line.split('-')[-1].strip()
records[pmid] = []
elif line.startswith('AUTHOR'):
records[pmid].append(line.split('-')[-1].strip())
데이터 프레임을 만들 때 df = pd.DataFrame (records)
를 사용하여 각 작성자를 열에 포함하거나 데이터 프레임 생성자에 전달하기 전에 목록을 결합합니다.
df = pd.DataFrame(
[', '.join(r) for r in records.values()],
index=records.keys()
)
산출
0
12345678 author1, author2
12345679 author3, author4
참조 페이지 https://stackoverflow.com/questions/63756468
'파이썬' 카테고리의 다른 글
파이썬에서 index () 이외의 메서드를 사용하여 문자열의 모든 두 번째 문자를 대문자로 만드나요? (0) | 2020.09.14 |
---|---|
파이썬 내 스크립트에 구문 오류가 있지만 이유와 해결 방법을 알 수 없습니다.> (0) | 2020.09.14 |
파이썬 Typeerror int는 호출 할 수 없습니다. (0) | 2020.09.14 |
파이썬 matplotlib / Seaborn 플롯에서 y 축 눈금 레이블을 제거하거나 숨기는 방법은 무엇입니까? (0) | 2020.09.14 |
파이썬 discord.py가 자동으로 결과를 직접 메시지로 전송 (0) | 2020.09.14 |
댓글