여러 목록을 데이터 프레임으로 가져 오기


164

파이썬 데이터 프레임에서 여러 목록을 가져 와서 다른 열로 어떻게 배치합니까? 이 솔루션을 시도했지만 문제가 발생했습니다.

시도 1 :

  • 세 개의 목록이 있고 함께 압축하여 사용하십시오. res = zip(lst1,lst2,lst3)
  • 단 하나의 열만 나타냅니다

시도 2 :

percentile_list = pd.DataFrame({'lst1Tite' : [lst1],
                                'lst2Tite' : [lst2],
                                'lst3Tite' : [lst3] }, 
                                columns=['lst1Tite','lst1Tite', 'lst1Tite'])
  • 하나의 행을 3 열 (위의 방법)로 생성하거나 전치하면 3 행과 1 열입니다

3 열 (3 개의 목록) 팬더 데이터 프레임으로 100 개의 행 (각 독립 목록의 길이)을 얻으려면 어떻게합니까?

답변:


279

나는 거의 거기에 있다고 생각합니다.의 주위에 여분의 대괄호를 제거하십시오 lst(또한 dict에서 데이터 프레임을 만들 때 열 이름을 지정할 필요가 없습니다).

import pandas as pd
lst1 = range(100)
lst2 = range(100)
lst3 = range(100)
percentile_list = pd.DataFrame(
    {'lst1Title': lst1,
     'lst2Title': lst2,
     'lst3Title': lst3
    })

percentile_list
    lst1Title  lst2Title  lst3Title
0          0         0         0
1          1         1         1
2          2         2         2
3          3         3         3
4          4         4         4
5          5         5         5
6          6         6         6
...

첫 번째 시도에서 np.column_stack보다 성능이 뛰어난 솔루션이 필요한 경우 zip여기 예제에서 약 2 배의 속도 향상이 가능하지만 내 의견으로는 약간의 가독성이 있습니다.

import numpy as np
percentile_list = pd.DataFrame(np.column_stack([lst1, lst2, lst3]), 
                               columns=['lst1Title', 'lst2Title', 'lst3Title'])

np.column_stack은보기이거나 데이터를 복사합니까? (복사라면 훨씬 더 효율적일 수있을 것 같습니다 (O (n)이 아닌 O (1))
user48956

@maxymoo 열 이름을 자동으로 목록 이름으로 설정할 수 있습니까?
joe5

1
목록이 다른 데이터 유형 인 경우 numpy 열 스택이 제대로 작동하지 않습니다.
user6386155

54

Aditya Guru 의 답변을 여기에 추가 하십시오. 지도를 사용할 필요가 없습니다. 다음과 같이 간단하게 수행 할 수 있습니다.

pd.DataFrame(list(zip(lst1, lst2, lst3)))

열 이름을 0,1,2로 설정합니다. 자신의 열 이름을 설정하려면 columns위의 방법으로 키워드 인수 를 전달하면 됩니다.

pd.DataFrame(list(zip(lst1, lst2, lst3)),
              columns=['lst1_title','lst2_title', 'lst3_title'])

3
Python 3.8 및 Pandas 1.0에서는 DataFrame이 iterable을 기대하고 zip ()은 iterable 객체를 반환하므로 list 함수를 사용할 필요가 없습니다. 따라서 pd.DataFrame(zip(lst1, lst2, lst3))해야합니다.
Sarfraaz Ahmed

10

첫 번째 접근 방식을 사용하여 추가하면됩니다.

pd.DataFrame(list(map(list, zip(lst1,lst2,lst3))))

8

하나 이상의 확장 가능한 솔루션 추가

lists = [lst1, lst2, lst3, lst4]
df = pd.concat([pd.Series(x) for x in lists], axis=1)

이것을 조금 설명해 주시겠습니까?
ZakS

1
당신은 (concat) 시리즈를 세로로 (axis = 1)리스트리스트로부터 DataFrame을 생성하기 위해
yona bendelac

5

위의 답변에 추가하여 즉시 만들 수 있습니다.

df= pd.DataFrame()
list1 = list(range(10))
list2 = list(range(10,20))
df['list1'] = list1
df['list2'] = list2
print(df)

그것이 도움이되기를 바랍니다!


1

@oopsi가 사용 pd.concat()되었지만 열 이름은 포함되지 않았습니다. 수락 된 답변의 첫 번째 솔루션과 달리 열 순서를 제어 할 수있는 다음을 수행 할 수 있습니다 (정렬되지 않은 dicts는 피하십시오).

import pandas as pd
lst1 = range(100)
lst2 = range(100)
lst3 = range(100)

s1=pd.Series(lst1,name='lst1Title')
s2=pd.Series(lst2,name='lst2Title')
s3=pd.Series(lst3 ,name='lst3Title')
percentile_list = pd.concat([s1,s2,s3], axis=1)

percentile_list
Out[2]: 
    lst1Title  lst2Title  lst3Title
0           0          0          0
1           1          1          1
2           2          2          2
3           3          3          3
4           4          4          4
5           5          5          5
6           6          6          6
7           7          7          7
8           8          8          8
...

1

여러 목록에서 데이터 프레임을 만드는 방법에는 여러 가지가 있습니다.

list1=[1,2,3,4]
list2=[5,6,7,8]
list3=[9,10,11,12]
  1. pd.DataFrame({'list1':list1, 'list2':list2, 'list3'=list3})

  2. pd.DataFrame(data=zip(list1,list2,list3),columns=['list1','list2','list3'])


0

이 코드를 간단하게 사용할 수 있습니다

train_data['labels']= train_data[["LABEL1","LABEL1","LABEL2","LABEL3","LABEL4","LABEL5","LABEL6","LABEL7"]].values.tolist()
train_df = pd.DataFrame(train_data, columns=['text','labels'])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.