postgreSQL 데이터베이스에 저장된 데이터가 있습니다. Python2.7을 사용 하여이 데이터를 쿼리하고 Pandas DataFrame으로 변환합니다. 그러나이 데이터 프레임의 마지막 열에는 그 안에 값의 사전 (또는 목록?)이 있습니다. DataFrame은 다음과 같습니다.
[1] df
Station ID Pollutants
8809 {"a": "46", "b": "3", "c": "12"}
8810 {"a": "36", "b": "5", "c": "8"}
8811 {"b": "2", "c": "7"}
8812 {"c": "11"}
8813 {"a": "82", "c": "15"}
DataFrame이 다음과 같이 보이도록이 열을 별도의 열로 분할해야합니다.
[2] df2
Station ID a b c
8809 46 3 12
8810 36 5 8
8811 NaN 2 7
8812 NaN NaN 11
8813 82 NaN 15
내가 가진 주요 문제는 목록의 길이가 동일하지 않다는 것입니다. 그러나 모든 목록에는 최대 3 개의 값 (a, b 및 c) 만 포함됩니다. 그리고 그들은 항상 같은 순서로 나타납니다 (첫 번째, 두 번째, c 세 번째).
다음 코드는 올바르게 작동하고 원하는 것을 정확하게 반환하는 데 사용되었습니다 (df2).
[3] df
[4] objs = [df, pandas.DataFrame(df['Pollutant Levels'].tolist()).iloc[:, :3]]
[5] df2 = pandas.concat(objs, axis=1).drop('Pollutant Levels', axis=1)
[6] print(df2)
지난주 에이 코드를 실행하고 있었고 정상적으로 작동했습니다. 그러나 이제 내 코드가 깨졌고 줄 [4] 에서이 오류가 발생합니다.
IndexError: out-of-bounds on slice (end)
코드를 변경하지 않았지만 이제 오류가 발생합니다. 나는 이것이 내 방법이 강력하지 않거나 적절하지 않기 때문이라고 생각합니다.
이 목록 열을 별도의 열로 나누는 방법에 대한 제안이나 지침은 대단히 감사하겠습니다!
편집 : .tolist () 및 .apply 메소드는 하나의 유니 코드 문자열이기 때문에 내 코드에서 작동하지 않는다고 생각합니다.
#My data format
u{'a': '1', 'b': '2', 'c': '3'}
#and not
{u'a': '1', u'b': '2', u'c': '3'}
이 형식으로 postgreSQL 데이터베이스에서 데이터를 가져옵니다. 이 문제에 대한 도움이나 아이디어가 있습니까? 유니 코드를 변환하는 방법이 있습니까?
iloc[:, :3]
3 개의 항목이 있다고 가정하고 더 최근의 데이터 조각에는 1 또는 2 만있을 것입니다 (예 : b
와 같지 않음 index 8813
)?
iloc
부분을 제외하면 팬더 0.18.1을 사용하여 작동합니다.