Pandas 데이터 프레임 목록을 함께 연결


129

하나의 Pandas 데이터 프레임으로 결합하려는 Pandas 데이터 프레임 목록이 있습니다. Python 2.7.10 및 Pandas 0.16.2를 사용하고 있습니다.

다음에서 데이터 프레임 목록을 만들었습니다.

import pandas as pd
dfs = []
sqlall = "select * from mytable"

for chunk in pd.read_sql_query(sqlall , cnxn, chunksize=10000):
    dfs.append(chunk)

이것은 데이터 프레임 목록을 반환합니다.

type(dfs[0])
Out[6]: pandas.core.frame.DataFrame

type(dfs)
Out[7]: list

len(dfs)
Out[8]: 408

다음은 몇 가지 샘플 데이터입니다.

# sample dataframes
d1 = pd.DataFrame({'one' : [1., 2., 3., 4.], 'two' : [4., 3., 2., 1.]})
d2 = pd.DataFrame({'one' : [5., 6., 7., 8.], 'two' : [9., 10., 11., 12.]})
d3 = pd.DataFrame({'one' : [15., 16., 17., 18.], 'two' : [19., 10., 11., 12.]})

# list of dataframes
mydfs = [d1, d2, d3]

, 및 을 하나의 pandas 데이터 프레임으로 결합 d1하고 싶습니다 . 또는 옵션을 사용할 때 큰 테이블을 데이터 프레임으로 직접 읽는 방법 이 매우 유용합니다. d2d3chunksize

답변:


243

모든 데이터 프레임에 동일한 열이있는 경우 간단히 concat다음과 같이 할 수 있습니다.

import pandas as pd
df = pd.concat(list_of_dataframes)

1
동일한 열이없는 경우 먼저 dict로 캐스팅 한 다음 from_dict를 사용할 수 있습니다. 아래 참조
meyerson

1
열을 추가하려면 axis = 1 인수를 추가하는 것을 잊지
ford prefect

3
data.frame같은 열이없는 경우에도 NaN새 버전에서 오류없이 삽입됩니다.pandas
joel.wilson

7

데이터 프레임에 모두 동일한 열이없는 경우 다음을 시도하십시오.

df = pd.DataFrame.from_dict(map(dict,df_list))

7
이 솔루션은 Python 3.6.5 / Pandas v0.23.0에서 작동하지 않습니다. 로 오류 TypeError: data argument can't be an iterator. list처음으로 변환하면 (Python 2.7을 모방하기 위해) 예상치 못한 결과가 나타납니다.
jpp

모든 데이터 프레임에 동일한 열이있는 경우 어떻게해야합니까?
Thony Nadhir

6

함수형 프로그래밍으로도 할 수 있습니다.

from functools import reduce
reduce(lambda df1, df2: df1.merge(df2, "outer"), mydfs)

2
from functools import reduce사용하기reduce
nishant

여러 DataFrame에 대해 쌍으로 병합하는 것을 권장하지 않으며 전혀 효율적이지 않습니다. pd.concat또는을 참조하십시오 join. 둘 다 프레임 목록을 허용하고 기본적으로 인덱스에 결합합니다.
cs95

0

concat 또한 기존 데이터 프레임에 대해 "loc"명령을 사용하여 가져온 목록 이해도 잘 작동합니다.

df = pd.read_csv('./data.csv') # ie; Dataframe pulled from csv file with a "userID" column

review_ids = ['1','2','3'] # ie; ID values to grab from DataFrame

# Gets rows in df where IDs match in the userID column and combines them 

dfa = pd.concat([df.loc[df['userID'] == x] for x in review_ids])
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.