Whi*_*ard 104 python concat dataframe pandas
我有一个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)
Run Code Online (Sandbox Code Playgroud)
这将返回数据帧列表
type(dfs[0])
Out[6]: pandas.core.frame.DataFrame
type(dfs)
Out[7]: list
len(dfs)
Out[8]: 408
Run Code Online (Sandbox Code Playgroud)
这是一些示例数据
# 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]
Run Code Online (Sandbox Code Playgroud)
我想结合d1,d2和d3成一个数据帧的大熊猫.或者,使用该chunksize选项时将大型表直接读入数据帧的方法将非常有用.
Dee*_*ace 190
鉴于所有数据帧都具有相同的列,您可以简单地使用concat它们:
import pandas as pd
df = pd.concat(list_of_dataframes)
Run Code Online (Sandbox Code Playgroud)
如果数据帧不是都具有相同的列,请尝试以下操作:
df = pd.DataFrame.from_dict(map(dict,df_list))
Run Code Online (Sandbox Code Playgroud)
你也可以用函数式编程来做到这一点:
from functools import reduce
reduce(lambda df1, df2: df1.merge(df2, "outer"), mydfs)
Run Code Online (Sandbox Code Playgroud)
只是添加更多细节:
例子:
list1 = [df1, df2, df3]
import pandas as pd
Run Code Online (Sandbox Code Playgroud)
逐行连接和忽略索引
pd.concat(list1, axis=0, ignore_index=True)
Run Code Online (Sandbox Code Playgroud)
注意:如果列名不同,则NaN将插入不同的列值
按列连接并希望保留列名
pd.concat(list1, axis=1, ignore_index=False)
Run Code Online (Sandbox Code Playgroud)
如果ignore_index=True,列名将填充从 0 到 (n-1) 的数字,其中n 是唯一列名的计数
| 归档时间: |
|
| 查看次数: |
99964 次 |
| 最近记录: |