tsv 데이터 파일 양식을 바꾸고 싶습니다. 특정 컬럼의 값을 컬럼명으로
조회수 547회
파일 양식이 예를들면:
파일명: test
이름:4개
샘플:4개
이름 위치 위치2 샘플 1 2 3
철수 7 334 A a a 0.1
영희 7 333 A a g 0.3
바둑 9 334 A a a 0.1
얼룩 8 330 A c a 0.2
철수 7 334 B c c 0.2
영희 7 333 B t a 0.1
바둑 9 334 B a c 0.3
얼룩 8 330 B c c 0.1
철수 7 334 C c t 0.2
영희 7 333 C t t 0.1
바둑 9 334 C a c 0.3
얼룩 8 330 C a t 0.1
이런식으로 되어있는걸
이름 위치 위치2 A B C
영희 7 333 ag ta tt
철수 7 334 aa cc ct
얼룩 8 330 ca cc at
바둑 9 334 aa ac at
이런식의 양식으로 바꾸고 싶습니다.
파일은 탭으로 구분되어 있습니다.
A B에서 결측치는 - - 이런식으로 나와있는데 이건 NN으로 바꾸고 싶습니다.
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
1 답변
-
unstack
이란 게 있습니다.import pandas as pd from io import StringIO f = """파일명: test 이름:4개 샘플:4개 이름 위치 위치2 샘플 1 2 3 철수 7 334 A a a 0.1 영희 7 333 A a g 0.3 바둑 9 334 A a a 0.1 얼룩 8 330 A c a 0.2 철수 7 334 B c c 0.2 영희 7 333 B t a 0.1 바둑 9 334 B a c 0.3 얼룩 8 330 B c c 0.1 철수 7 334 C c t 0.2 영희 7 333 C t t 0.1 바둑 9 334 C a c 0.3 얼룩 8 330 C a t 0.1""" df = pd.read_csv(StringIO(f), skiprows=3, sep="\t") print(df.to_markdown()) """ | | 이름 | 위치 | 위치2 | 샘플 | 1 | 2 | 3 | |---:|:-------|-------:|--------:|:-------|:----|:----|----:| | 0 | 철수 | 7 | 334 | A | a | a | 0.1 | | 1 | 영희 | 7 | 333 | A | a | g | 0.3 | | 2 | 바둑 | 9 | 334 | A | a | a | 0.1 | | 3 | 얼룩 | 8 | 330 | A | c | a | 0.2 | | 4 | 철수 | 7 | 334 | B | c | c | 0.2 | | 5 | 영희 | 7 | 333 | B | t | a | 0.1 | | 6 | 바둑 | 9 | 334 | B | a | c | 0.3 | | 7 | 얼룩 | 8 | 330 | B | c | c | 0.1 | | 8 | 철수 | 7 | 334 | C | c | t | 0.2 | | 9 | 영희 | 7 | 333 | C | t | t | 0.1 | | 10 | 바둑 | 9 | 334 | C | a | c | 0.3 | | 11 | 얼룩 | 8 | 330 | C | a | t | 0.1 | """ df["1_2"] = df["1"] + df["2"] print(df.to_markdown()) """ | | 이름 | 위치 | 위치2 | 샘플 | 1 | 2 | 3 | 1_2 | |---:|:-------|-------:|--------:|:-------|:----|:----|----:|:------| | 0 | 철수 | 7 | 334 | A | a | a | 0.1 | aa | | 1 | 영희 | 7 | 333 | A | a | g | 0.3 | ag | | 2 | 바둑 | 9 | 334 | A | a | a | 0.1 | aa | | 3 | 얼룩 | 8 | 330 | A | c | a | 0.2 | ca | | 4 | 철수 | 7 | 334 | B | c | c | 0.2 | cc | | 5 | 영희 | 7 | 333 | B | t | a | 0.1 | ta | | 6 | 바둑 | 9 | 334 | B | a | c | 0.3 | ac | | 7 | 얼룩 | 8 | 330 | B | c | c | 0.1 | cc | | 8 | 철수 | 7 | 334 | C | c | t | 0.2 | ct | | 9 | 영희 | 7 | 333 | C | t | t | 0.1 | tt | | 10 | 바둑 | 9 | 334 | C | a | c | 0.3 | ac | | 11 | 얼룩 | 8 | 330 | C | a | t | 0.1 | at | """ df1 = df[["이름", "위치", "위치2", "샘플", "1_2"]].set_index(["이름", "위치", "위치2", "샘플"]) print(df1.to_markdown()) """ | | 1_2 | |:----------------------|:------| | ('철수', 7, 334, 'A') | aa | | ('영희', 7, 333, 'A') | ag | | ('바둑', 9, 334, 'A') | aa | | ('얼룩', 8, 330, 'A') | ca | | ('철수', 7, 334, 'B') | cc | | ('영희', 7, 333, 'B') | ta | | ('바둑', 9, 334, 'B') | ac | | ('얼룩', 8, 330, 'B') | cc | | ('철수', 7, 334, 'C') | ct | | ('영희', 7, 333, 'C') | tt | | ('바둑', 9, 334, 'C') | ac | | ('얼룩', 8, 330, 'C') | at | """ df2 = df1.unstack("샘플").droplevel(0, axis=1) print(df2.to_markdown()) """ | | A | B | C | |:-----------------|:----|:----|:----| | ('바둑', 9, 334) | aa | ac | ac | | ('얼룩', 8, 330) | ca | cc | at | | ('영희', 7, 333) | ag | ta | tt | | ('철수', 7, 334) | aa | cc | ct | """ df2 = df2.reset_index() print(df2.to_markdown()) """ | | 이름 | 위치 | 위치2 | A | B | C | |---:|:-------|-------:|--------:|:----|:----|:----| | 0 | 바둑 | 9 | 334 | aa | ac | ac | | 1 | 얼룩 | 8 | 330 | ca | cc | at | | 2 | 영희 | 7 | 333 | ag | ta | tt | | 3 | 철수 | 7 | 334 | aa | cc | ct | """ df2.to_csv("result.csv", sep="\t", index=None) """ 이름 위치 위치2 A B C 바둑 9 334 aa ac ac 얼룩 8 330 ca cc at 영희 7 333 ag ta tt 철수 7 334 aa cc ct """
댓글 입력