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

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

시도 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 개의 행 (각 독립 목록의 길이)을 얻으려면 어떻게합니까?



답변

나는 거의 거기에 있다고 생각합니다.의 주위에 여분의 대괄호를 제거하십시오 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'])


답변

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'])


답변

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

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


답변

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

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


답변

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

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

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


답변

@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
...


답변

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

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'])