初始化空DataFrame并追加行

时间:2017-04-03 02:54:02

标签: python pandas dataframe append concat

creating an empty dataframe and populating rows later不同,我有许多需要连接的数据帧。

如果只有两个数据框,我可以这样做:

df1 = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB'))

df1.append(df2, ignore_index=True)

想象一下,每当我将新文件读入DataFrame对象时,我都需要附加/连接数百万dfimport pandas as pd alldf = pd.DataFrame(, columns=list('AB')) for filename in os.listdir(indir): df = pd.read_csv(indir+filename, delimiter=' ') alldf.append(df, ignore_index=True)

但是当我尝试初始化空数据帧然后通过循环添加新数据帧时:

alldf

这将返回一个只有标题行的空alldf = pd.DataFrame(columns=list('AB')) df1 = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB')) df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB')) for df in [df1, df2]: alldf.append(df, ignore_index=True) ,例如

log

2 个答案:

答案 0 :(得分:2)

对于一系列数据帧,

df.concat()可能是要走的路,特别是对于干净的CSV。 如果您怀疑自己的CSV是脏的,或者read_csv()能够识别文件之间的混合类型,您可能希望明确地在循环中创建每个数据帧。

您可以初始化第一个文件的数据框,然后每个后续文件都以第一个文件的空数据框开头。

df2 = pd.DataFrame(data=None, columns=df1.columns,index=df1.index)

这将采用数据框df1的结构但不包含数据,并创建df2。如果要在列上强制数据类型,则可以在创建复制结构之前将其设置为df1

more details

答案 1 :(得分:-1)

来自@DSM评论,这有效:

import pandas as pd
dfs = []
for filename in os.listdir(indir):
    df = pd.read_csv(indir+filename, delimiter=' ')
    dfs(df)

alldf = pd.concat(dfs)