初始化一个空的 DataFrame 并附加行
Initializing an empty DataFrame and appending rows
与 不同,我有很多数据帧需要连接起来。
如果只有两个数据框,我可以这样做:
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 object 时,我有数百万 df
需要 appended/concatenated。
但是当我尝试初始化一个空数据帧然后通过循环添加新数据帧时:
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)
这将 return 一个只有 header 行的空 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)
来自@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)
df.concat()
遍历一组数据帧可能是可行的方法,尤其是对于干净的 CSV。 但是 如果您怀疑您的 CSV 文件不干净或者可能被 read_csv()
识别为文件之间的混合类型,您可能需要在循环中明确创建每个数据帧。
您可以为第一个文件初始化一个数据帧,然后每个后续文件都以第一个文件为基础的空数据帧开始。
df2 = pd.DataFrame(data=None, columns=df1.columns,index=df1.index)
这采用数据帧 df1
的结构但没有数据,并创建 df2
。如果你想在列上强制数据类型,那么你可以在创建它时 df1
在复制它的结构之前做到这一点。
more details
与
如果只有两个数据框,我可以这样做:
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 object 时,我有数百万 df
需要 appended/concatenated。
但是当我尝试初始化一个空数据帧然后通过循环添加新数据帧时:
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)
这将 return 一个只有 header 行的空 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)
来自@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)
df.concat()
遍历一组数据帧可能是可行的方法,尤其是对于干净的 CSV。 但是 如果您怀疑您的 CSV 文件不干净或者可能被 read_csv()
识别为文件之间的混合类型,您可能需要在循环中明确创建每个数据帧。
您可以为第一个文件初始化一个数据帧,然后每个后续文件都以第一个文件为基础的空数据帧开始。
df2 = pd.DataFrame(data=None, columns=df1.columns,index=df1.index)
这采用数据帧 df1
的结构但没有数据,并创建 df2
。如果你想在列上强制数据类型,那么你可以在创建它时 df1
在复制它的结构之前做到这一点。
more details