将熊猫数据框列表连接在一起


129

我有一个熊猫数据框列表,我想将其合并为一个熊猫数据框。我正在使用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]

我想将d1d2和组合d3成一个熊猫数据框。另外,使用该chunksize选项时将大表直接读入数据框的方法将非常有帮助。

Answers:


243

鉴于所有数据框都具有相同的列,您可以简单地将concat它们:

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

1
如果它们没有相同的列,则可以先将它们转换为字典,然后使用from_dict-参见下文
meyerson

1
如果您想添加列,请记住添加axis = 1参数
福特省长

3
我想,即使某些data.frame列没有相同的列,NaN也将在新版本中插入而不会pandas
引发

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。转换为listfirst(模仿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.concatjoin,默认情况下都接受框架列表并加入索引。
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])
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.