连接两个数据帧而不丢失列

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

我已经尝试使用pd.concat([df1, df2], axis = 1)连接两个数据帧,但是,这并未将所有列名都保留在df1中。

import pandas as pd
from datetime import timedelta
df = pd.DataFrame({
        'date': ['2001-02-01','2001-02-02','2001-02-03', '2001-02-04'],
        'future_date': ['2001-02-01','2001-02-02','2001-02-03', '2001-02-04'],
        'x Value': [100, 200, 300, 400],
'x1 Value': [100, 200, 400, 400],
'x2 Value': [100, 300, 300, 400],
'xN Value': [200, 200, 300, 400]})

df2 = (df1['future_date'] + pd.Timedelta(5, unit='days')).to_frame()
pd.concat([df1, df2], axis = 1).tail(10)

当我返回pd.concat([df1, df2], axis = 1).tail(10)时,我仅获得future_date列值。

所需的数据框:

    future_date date       x Value  x1 Value    x2 Value    xN Value
0   2001-02-01  2001-02-01 100  100 100 200
1   2001-02-02  2001-02-02 200  200 300 200
2   2001-02-03  2001-02-03 300  400 300 300
3   2001-02-04  2001-02-04 400  400 400 400
4   2001-02-05  
5   2001-02-06
6   2001-02-07
7   2001-02-08

我也尝试过

new_df = pd.concat([df2, df1(columns=df1.columns.tolist())], ignore_index=True)

TypeError: 'DataFrame' object is not callable
python pandas dataframe concat
1个回答
0
投票

您需要首先创建缺少的列。

for col in df.columns:
    if col not in df2.columns:
        df2[col] = None

df2 = pd.concat([df, df2], ignore_index=True)

         date future_date x Value x1 Value x2 Value xN Value
0  2001-02-01  2001-02-01     100      100      100      200
1  2001-02-02  2001-02-02     200      200      300      200
2  2001-02-03  2001-02-03     300      400      300      300
3  2001-02-04  2001-02-04     400      400      400      400
4        None  2001-02-06    None     None     None     None
5        None  2001-02-07    None     None     None     None
6        None  2001-02-08    None     None     None     None
7        None  2001-02-09    None     None     None     None
© www.soinside.com 2019 - 2024. All rights reserved.