初始化一个空的DataFrame并追加行

问题描述 投票:0回答:2

创建空数据框并稍后填充行不同,我有很多数据框需要连接。

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

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 对象时,我都有数百万个

df
需要附加/连接。

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

import 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)
python pandas dataframe append concatenation
2个回答
2
投票

df.concat()
在一组数据帧上可能是可行的方法,特别是对于干净的 CSV。 但是,如果您怀疑您的 CSV 是脏的,或者可能被
read_csv()
识别为文件之间的混合类型,您可能需要在循环中显式创建每个数据帧。

您可以为第一个文件初始化一个数据帧,然后每个后续文件都以基于第一个文件的空数据帧开始。

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

这采用数据帧

df1
的结构,但没有数据,并创建
df2
。如果您想在列上强制使用数据类型,那么您可以在创建列时、复制其结构之前执行此操作。

更多详情


-1
投票

df1

© www.soinside.com 2019 - 2024. All rights reserved.