将一个pandas数据帧列表连接在一起

时间:2015-09-07 18:13:42

标签: python pandas dataframe concat

我有一个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]

我想将d1d2d3合并到一个pandas数据帧中。或者,使用chunksize选项时将大型表直接读入数据帧的方法将非常有用。

5 个答案:

答案 0 :(得分:152)

鉴于所有数据框都具有相同的列,您只需concat它们:

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

答案 1 :(得分:6)

如果数据帧不是都具有相同的列,请尝试以下操作:

var $text= "<p>ğ</p>";
        var $regexTM = /(<([^>]+)>)/ig;
        var $trimtagTM = $text.replace($regexTM,""); 
        var $completeTM = $trimtagTM.replace("&nbsp;", "");

        alert($completeTM.length);
        // call back = 9

答案 2 :(得分:2)

只是添加更多细节:

示例:

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 是唯一列名的计数

答案 3 :(得分:1)

你也可以通过函数式编程来实现:

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

答案 4 :(得分: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])