连接数据框列表
Concatenating list of data frames
我需要一个简单的 pandas
支持。我正在尝试连接数据框列表。我有一个如下所示的数据框列表。
Month First Second Third
Jan 4535 34534 54662
Feb 6768 846 2545
Mar 978 23 1255
Apr 356 9766 7855
Quarter First Second Third
Q1 85456 3256 6455
Q2 41256 125432 1356
Q3 45546 13565 15646
Q4 746 13456 16545
Calendar First Second Third
1/01/2021 1452 56853 45698635
1/02/2021 16565 5653463 565746
1/02/2021 566534 465464665 485634
1/03/2021 4653 126689 465874
我想要的输出:
Date First Second Third Type
Jan 4535 34534 54662 Month
Feb 6768 846 2545 Month
Mar 978 23 1255 Month
Apr 356 9766 7855 Month
Q1 85456 3256 6455 Quarter
Q2 41256 125432 1356 Quarter
Q3 45546 13565 15646 Quarter
Q4 746 13456 16545 Quarter
1/01/2021 1452 56853 45698635 Calendar
1/02/2021 16565 5653463 565746 Calendar
1/02/2021 566534 465464665 485634 Calendar
1/03/2021 4653 126689 465874 Calendar
如有任何帮助,我们将不胜感激。
使用pd.concat
out = pd.concat([df.assign(Type=df.columns[0]).rename(columns={df.columns[0]: 'Date'})
for df in [df1, df2, df3]], ignore_index=True)
print(out)
# Output
Date First Second Third Type
0 Jan 4535 34534 54662 Month
1 Feb 6768 846 2545 Month
2 Mar 978 23 1255 Month
3 Apr 356 9766 7855 Month
4 Q1 85456 3256 6455 Quarter
5 Q2 41256 125432 1356 Quarter
6 Q3 45546 13565 15646 Quarter
7 Q4 746 13456 16545 Quarter
8 1/01/2021 1452 56853 45698635 Calendar
9 1/02/2021 16565 5653463 565746 Calendar
10 1/02/2021 566534 465464665 485634 Calendar
11 1/03/2021 4653 126689 465874 Calendar
使用pd.concat
垂直连接,bfill
水平连接(axis=1
)连接non-same-named列,然后insert
和drop
:
dataframes = {
'Month': df1,
'Quarter': df2,
'Calendar': df3,
}
df = pd.concat([d.assign(Type=col) for col, d in dataframes.items()])
df.insert(0, 'Date', df[list(dataframes)].bfill(axis=1).iloc[:, 0])
df = df.drop(list(dataframes), axis=1).reset_index(drop=True)
输出:
>>> df
Date First Second Third Type
0 Jan 4535 34534 54662 Month
1 Feb 6768 846 2545 Month
2 Mar 978 23 1255 Month
3 Apr 356 9766 7855 Month
4 Q1 85456 3256 6455 Quarter
5 Q2 41256 125432 1356 Quarter
6 Q3 45546 13565 15646 Quarter
7 Q4 746 13456 16545 Quarter
8 1/01/2021 1452 56853 45698635 Calendar
9 1/02/2021 16565 5653463 565746 Calendar
10 1/02/2021 566534 465464665 485634 Calendar
11 1/03/2021 4653 126689 465874 Calendar
import pandas as pd
import numpy as np
#import csv
a = pd.read_csv("a.csv").dropna()
b = pd.read_csv("b.csv").dropna()
c = pd.read_csv("c.csv").dropna()
a['Type'] = 'Month'
b['Type'] = 'Quarter'
c['Type'] = 'Calendar'
a = a.rename(columns={"Month": "Date"})
b = b.rename(columns={"Quarter": "Date"})
c = c.rename(columns={"Calendar": "Date"})
frames = [a, b, c]
result = pd.concat(frames)
result
Date First Second Third Type
我需要一个简单的 pandas
支持。我正在尝试连接数据框列表。我有一个如下所示的数据框列表。
Month First Second Third
Jan 4535 34534 54662
Feb 6768 846 2545
Mar 978 23 1255
Apr 356 9766 7855
Quarter First Second Third
Q1 85456 3256 6455
Q2 41256 125432 1356
Q3 45546 13565 15646
Q4 746 13456 16545
Calendar First Second Third
1/01/2021 1452 56853 45698635
1/02/2021 16565 5653463 565746
1/02/2021 566534 465464665 485634
1/03/2021 4653 126689 465874
我想要的输出:
Date First Second Third Type
Jan 4535 34534 54662 Month
Feb 6768 846 2545 Month
Mar 978 23 1255 Month
Apr 356 9766 7855 Month
Q1 85456 3256 6455 Quarter
Q2 41256 125432 1356 Quarter
Q3 45546 13565 15646 Quarter
Q4 746 13456 16545 Quarter
1/01/2021 1452 56853 45698635 Calendar
1/02/2021 16565 5653463 565746 Calendar
1/02/2021 566534 465464665 485634 Calendar
1/03/2021 4653 126689 465874 Calendar
如有任何帮助,我们将不胜感激。
使用pd.concat
out = pd.concat([df.assign(Type=df.columns[0]).rename(columns={df.columns[0]: 'Date'})
for df in [df1, df2, df3]], ignore_index=True)
print(out)
# Output
Date First Second Third Type
0 Jan 4535 34534 54662 Month
1 Feb 6768 846 2545 Month
2 Mar 978 23 1255 Month
3 Apr 356 9766 7855 Month
4 Q1 85456 3256 6455 Quarter
5 Q2 41256 125432 1356 Quarter
6 Q3 45546 13565 15646 Quarter
7 Q4 746 13456 16545 Quarter
8 1/01/2021 1452 56853 45698635 Calendar
9 1/02/2021 16565 5653463 565746 Calendar
10 1/02/2021 566534 465464665 485634 Calendar
11 1/03/2021 4653 126689 465874 Calendar
使用pd.concat
垂直连接,bfill
水平连接(axis=1
)连接non-same-named列,然后insert
和drop
:
dataframes = {
'Month': df1,
'Quarter': df2,
'Calendar': df3,
}
df = pd.concat([d.assign(Type=col) for col, d in dataframes.items()])
df.insert(0, 'Date', df[list(dataframes)].bfill(axis=1).iloc[:, 0])
df = df.drop(list(dataframes), axis=1).reset_index(drop=True)
输出:
>>> df
Date First Second Third Type
0 Jan 4535 34534 54662 Month
1 Feb 6768 846 2545 Month
2 Mar 978 23 1255 Month
3 Apr 356 9766 7855 Month
4 Q1 85456 3256 6455 Quarter
5 Q2 41256 125432 1356 Quarter
6 Q3 45546 13565 15646 Quarter
7 Q4 746 13456 16545 Quarter
8 1/01/2021 1452 56853 45698635 Calendar
9 1/02/2021 16565 5653463 565746 Calendar
10 1/02/2021 566534 465464665 485634 Calendar
11 1/03/2021 4653 126689 465874 Calendar
import pandas as pd
import numpy as np
#import csv
a = pd.read_csv("a.csv").dropna()
b = pd.read_csv("b.csv").dropna()
c = pd.read_csv("c.csv").dropna()
a['Type'] = 'Month'
b['Type'] = 'Quarter'
c['Type'] = 'Calendar'
a = a.rename(columns={"Month": "Date"})
b = b.rename(columns={"Quarter": "Date"})
c = c.rename(columns={"Calendar": "Date"})
frames = [a, b, c]
result = pd.concat(frames)
result
Date First Second Third Type