다양한 타입의 데이터를 포함하는 list가 string일 때 이를 온전히 list로 받으려면
조회수 457회
data = "[[10.82, 'C9 Hai', 'TSM Bjergsen', [], 9229, 8469], [16.286, 'C9 LemonNation', 'TSM WildTurtle', ['TSM Santorin', 'TSM Bjergsen', 'TSM Lustboy'], 13908, 5960]]"
print(type(data))
>>> <class 'str'>
이런 형태의 데이터를 지금 상태 온전히 list로서 사용하고 싶은데 무엇을 기준으로 분할해야 할지 감이 잡히지 않습니다. 이 데이터를 이용해 선수들의 KillDeathAssist 점수를 산출하려고 하는데, list in list의 첫번째 값이 시간, 두번째 값이 죽은 플레이어, 세번째 값이 킬을 올린 플레이어, 네번째 원소인 list는 킬에 기여를 한 플레이어들. 이런 식으로 순서가 정해진 데이터라 .count()를 사용하기에도 여의치 않아 질문드립니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
아래와 같이 해보세요.
In [2]: data = "[[10.82, 'C9 Hai', 'TSM Bjergsen', [], 9229, 8469], [16.286, 'C9 ...: LemonNation', 'TSM WildTurtle', ['TSM Santorin', 'TSM Bjergsen', 'TSM L ...: ustboy'], 13908, 5960]]" In [3]: L = eval(data) In [4]: L Out[4]: [[10.82, 'C9 Hai', 'TSM Bjergsen', [], 9229, 8469], [16.286, 'C9 LemonNation', 'TSM WildTurtle', ['TSM Santorin', 'TSM Bjergsen', 'TSM Lustboy'], 13908, 5960]] In [5]: type(L) Out[5]: list
-
import ast data_s = "[[10.82, 'C9 Hai', 'TSM Bjergsen', [], 9229, 8469], [16.286, 'C9 LemonNation', 'TSM WildTurtle', ['TSM Santorin', 'TSM Bjergsen', 'TSM Lustboy'], 13908, 5960]]" data = ast.literal_eval(data_s)
이렇게 하면,
data
는 데이터row들의 리스트가 됩니다. 이 row 를 for 문으로 이터레이트해서, row[3] 에 특정한 유저가 있는지는focus_user in row[3]
를 판단해 볼 수 있을 겁니다.def select_rows_by_killassist(user, data): return [ row for row in data if user in row[3]]
또는,
import pandas df = pd.DataFrame(data, columns=["time", "killed", "killer", "killassist", "val1", "val2" ])
이렇게 pandas dataframe 으로 만들어 놓고서 이런저런 조작을 해 볼 수 있을 거고요.
특정 유저가 포함된 row 들만 셀렉드하는 건,
user = 'TSM Santorin' rows_with_user = df.killerassist.apply(lambda lst: user in lst) df[rows_with_user == True]
이런식으로 가능하고요.
댓글 입력