Python 如何将数据帧分配给其他数据帧的切片

Python 如何将数据帧分配给其他数据帧的切片,python,pandas,dataframe,slice,Python,Pandas,Dataframe,Slice,我有带数据的Excel电子表格,每年一份。唉,这些列在一年中略有变化。我想要的是有一个包含所有数据的数据框,并用预定义的数据填充缺少的列。我编写了一个小的示例程序来测试这一点 import numpy as np import pandas as pd # Initialize three dataframes df1 = pd.DataFrame([[1,2], [11,22],[111,222]], columns=['een', 'twee']) df2 = pd.DataFrame([

我有带数据的Excel电子表格,每年一份。唉,这些列在一年中略有变化。我想要的是有一个包含所有数据的数据框,并用预定义的数据填充缺少的列。我编写了一个小的示例程序来测试这一点

import numpy as np
import pandas as pd

# Initialize three dataframes
df1 = pd.DataFrame([[1,2], [11,22],[111,222]], columns=['een', 'twee'])
df2 = pd.DataFrame([[3,4], [33,44],[333,444]], columns=['een', 'drie'])
df3 = pd.DataFrame([[5,6], [55,66],[555,666]], columns=['twee', 'vier'])

# Store these in a dictionary and print for verification
d = {'df1': df1, 'df2': df2, 'df3': df3}

for key in d:
    print(d[key])

print()

# Create a list of all columns, as order is relevant a Set is not used
cols = []

# Count total number of rows
nrows = 0

# Loop thru each dataframe to determine total number of rows and columns
for key in d:
    df = d[key]
    nrows += len(df)

    for col in df.columns:
        if col not in cols:
            cols += [col]

# Create total dataframe, fill with default (zeros)
data = pd.DataFrame(np.zeros((nrows, len(cols))), columns=cols)

# Assign dataframe to each slice
c = 0
for key in d:
    data.loc[c:c+len(d[key])-1, d[key].columns] = d[key]
    c += len(d[key])

print(data)
数据帧已经初始化好了,但是数据帧切片的赋值有点奇怪。我想要(和期望)的是:

但我得到的是:

     een   twee  drie  vier
0    1.0    2.0   0.0   0.0
1   11.0   22.0   0.0   0.0
2  111.0  222.0   0.0   0.0
3    NaN    0.0   NaN   0.0
4    NaN    0.0   NaN   0.0
5    NaN    0.0   NaN   0.0
6    0.0    NaN   0.0   NaN
7    0.0    NaN   0.0   NaN
8    0.0    NaN   0.0   NaN

正确分配第一个数据帧的位置和数据。但是,第二个数据帧被分配到正确的位置,而不是它的内容:而是被分配到NaN。第三个数据帧也会发生这种情况:位置正确,但缺少数据。我曾尝试
将d[key].loc[0:2,d[key].columns
和一些更奇特的解决方案分配给数据片,但都返回NaN。如何才能将数据帧的内容也分配给数据?

根据注释,您可以使用:

pd.concat([df1, df2, df3])


你的预期输出是什么?你能在你的问题中包括这一点吗?
pd.concat([df1,df2,df3])
不能解决还是
pd.concat([df1,df2,df3])。fillna(0)
?有时熊猫是多么的简单:-)。你的建议给了我想要的东西。看起来我在写我自己的Pandas.concat。非常感谢。回答这个问题,我会把它标记为正确的答案。除此之外:我仍然不明白为什么我的解决方案不起作用。
pd.concat([df1, df2, df3])
pd.concat([df1, df2, df3]).fillna(0)