Python 连接两个数据帧而不丢失列
我已经尝试使用Python 连接两个数据帧而不丢失列,python,pandas,dataframe,concat,Python,Pandas,Dataframe,Concat,我已经尝试使用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-
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\u 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
您需要首先创建缺少的列
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
您需要首先创建缺少的列
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