programing

팬더 데이터 프레임 목록 연결

bestcode 2023. 1. 21. 09:47
반응형

팬더 데이터 프레임 목록 연결

하나의 Panda 데이터 프레임에 결합하고 싶은 Panda 데이터 프레임 목록이 있습니다.Python 2.7.10과 Panda 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]

결합하고 싶다d1,d2,그리고.d3하나의 팬더 데이터 프레임으로 변환합니다.또는 큰 테이블을 직접 데이터 프레임에 읽어들이는 방법chunksize옵션은 매우 도움이 될 것입니다.

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

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

몇 가지 세부사항을 추가하겠습니다.

예:

list1 = [df1, df2, df3]

import pandas as pd
  • 행 단위 연결 및 인덱스 무시

    pd.concat(list1, axis=0, ignore_index=True)
    

    참고: 열 이름이 같지 않으면 NaN이 다른 열 값에 삽입됩니다.

  • 열별 연결 및 열 이름 유지

    pd.concat(list1, axis=1, ignore_index=False)
    

    ignore_index=True인 경우 열 이름은 0에서 (n-1)까지의 숫자로 채워집니다. 여기서 n은 고유한 열 이름의 개수입니다.

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

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

기능 프로그래밍으로도 수행할 수 있습니다.

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

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

팬더concat와 함께 동작합니다.functools

from functors import reduce as reduce
import pandas as pd;
deaf = pd.read_csv("http://www.aol.com/users/data.csv")
for q in range(0, Len(deaf)):
  new = map(lambda x: reduce(pd.concat(x))

언급URL : https://stackoverflow.com/questions/32444138/concatenate-a-list-of-pandas-dataframes-together

반응형