.
이 아닌은 중첩 목록을 사용하지만 대신 사전을 사용하는 것이 가장 좋습니다. 당신이 팬더를 언급했기 때문에, 팬더 DataFrame 객체는 DataFrame을 사전으로 변환하는 to_dict
함수를 가지고 있으며, 원하는 것에 따라 몇 가지 옵션이 있습니다.
중복 된 인덱스를 사용하여 데이터 구조를 만드는 중입니다. 여기서 가장 좋은 옵션은 df.to_dict("split")
을 실행하여 생성 된 구조를 사용하는 것입니다.
3 1 2 4
2 0 0 0 0
1 0 0 0 0
2 0 0 0 0
1 0 0 0 0
실행`df.to_dict ("분할") 다음이 작업을 수행합니다 :
d = df.to_dict("split")
{
'columns': [3, 1, 2, 4],
'data': [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]],
'index': [2, 1, 2, 1]
}
데이터에 접근을이 시나리오에서, 그리고
은 DataFrame (DF)는 다음과 같습니다 말 @Makiflow가 보여주는 것은 까다 롭습니다. Pandas 내에서도 Dataframe에 중복 된 인덱스 또는 컬럼을 사용하면 작업이보다 재미 있습니다. 이 경우 df['data'][3][1]
을 선택하면 data
키에 포함 된 세 번째 목록의 두 번째 요소가 선택됩니다. 실제로 행렬의 4 행 2 열을 선택합니다. 이름이 인 항목을 참조 할 수있게하려면 다리 작업을 조금 더해야합니다.
의 색인 값을 제공하는 col_num = d['columns'].index(3)
을 실행할 수 있지만 d['index'].index(2)
을 수행하면 색인 3에서 2를 선택하려는 경우에도 항상 0이됩니다.index()
은 조건과 일치하는 첫 번째 값의 인덱스를 반환하기 때문입니다. 물론 (col, row) 인덱스 튜플로 선택할 수는 있지만, 처음에는 열 이름과 인덱스 값을 갖는 목적을 상실합니다. 당신이 팬더없이이 구조를 생성 할 경우
, 당신은 실행할 수 있습니다 COLS, ROWS = 5, 5 열 = _ 범위 (COLS)에 대한 random.randint (0, COLS)] 행을 = [ 범위에 _ 대한 random.randint (1,2) (행)]
d = {"columns": columns,
"index": rows,
"data": [[0 for _ in range(COLS)] for _ in range(ROWS)]
}
이럴 - 더 나은 솔루션이 실제로 고유 인덱스 및 열 값을 가지고 데이터 구조를 강제하는 것입니다. to_dict()
출력됩니다 아주 간단하게 사전의 기본 출력 :
d = df.to_dict() # also the same as df.to_dict("dict")
{
1: {1: 0, 2: 0},
2: {1: 0, 2: 0},
3: {1: 0, 2: 0},
4: {1: 0, 2: 0}
}
이 구성에서, 사전에 각 키 컬럼의 이름입니다. 각 키는 해당 열의 정보를 나타내는 다른 dicitonary를 가리 킵니다. 각 키는 인덱스 값이고 그 뒤에 값이옵니다.
당신이 1라는 이름의 인덱스 에 3라는 이름의 열 에서 값을 얻을 원한다면 당신이 할 것이기 때문에이 가능성이 가장 직관적 의미가 있습니다 :
d = df.to_dict()
d[3][1]
# 0
는이 데이터를 생성 할 수 있습니다 구조는 팬더를 사용하지 않고 간단하게 :
COLS, ROWS = 5,5
rows = [i for i in range(ROWS)]
columns = [i for in range(COLS)]
{c : {i:0 for i in rows} for c in columns}
# {
# 0: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
# 1: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
# 2: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
# 3: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0},
# 4: {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
# }
정말 제약 조건/요구 사항에 따라 달라집니다.