In [22]:
### 1. concat 메서드로 데이터 연결하기
import pandas as pd
df1 = pd.read_csv('../../data/concat_1.csv')
df2 = pd.read_csv('../../data/concat_2.csv')
df3 = pd.read_csv('../../data/concat_3.csv')
print(df1)
print(df2)
print(df3)
A B C D
0 a0 b0 c0 d0
1 a1 b1 c1 d1
2 a2 b2 c2 d2
3 a3 b3 c3 d3
A B C D
0 a4 b4 c4 d4
1 a5 b5 c5 d5
2 a6 b6 c6 d6
3 a7 b7 c7 d7
A B C D
0 a8 b8 c8 d8
1 a9 b9 c9 d9
2 a10 b10 c10 d10
3 a11 b11 c11 d11
In [23]:
# concat 메서드는 전달받은 순서대로 데이터를 연결함
row_concat = pd.concat([df1, df2, df3])
row_concat
Out[23]:
A | B | C | D | |
---|---|---|---|---|
0 | a0 | b0 | c0 | d0 |
1 | a1 | b1 | c1 | d1 |
2 | a2 | b2 | c2 | d2 |
3 | a3 | b3 | c3 | d3 |
0 | a4 | b4 | c4 | d4 |
1 | a5 | b5 | c5 | d5 |
2 | a6 | b6 | c6 | d6 |
3 | a7 | b7 | c7 | d7 |
0 | a8 | b8 | c8 | d8 |
1 | a9 | b9 | c9 | d9 |
2 | a10 | b10 | c10 | d10 |
3 | a11 | b11 | c11 | d11 |
데이터프레임에 시리즈 연결¶
In [24]:
new_row_series = pd.Series(['n1', 'n2', 'n3', 'n4'])
In [25]:
# 새로운 열로 추가
# 시리즈에는 열 이름이 없기 때문에 새로운 열로 간주(0열)
print(pd.concat([df1, new_row_series]))
A B C D 0
0 a0 b0 c0 d0 NaN
1 a1 b1 c1 d1 NaN
2 a2 b2 c2 d2 NaN
3 a3 b3 c3 d3 NaN
0 NaN NaN NaN NaN n1
1 NaN NaN NaN NaN n2
2 NaN NaN NaN NaN n3
3 NaN NaN NaN NaN n4
행 1개로 구성된 데이터 프레임 생성하여 연결하기¶
In [26]:
new_row_df = pd.DataFrame([['n1','n2','n3','n4']],\
columns=['A','B','C','D'])
print(new_row_df)
A B C D
0 n1 n2 n3 n4
In [27]:
# concat 메서드는 한 번에 2개 이상의 데이터 프레임 연결
print(pd.concat([df1, new_row_df]))
A B C D
0 a0 b0 c0 d0
1 a1 b1 c1 d1
2 a2 b2 c2 d2
3 a3 b3 c3 d3
0 n1 n2 n3 n4
In [28]:
# 연결할 데이터 프레임이 1개라면 append 메서드를 사용
print(df1.append(new_row_df))
A B C D
0 a0 b0 c0 d0
1 a1 b1 c1 d1
2 a2 b2 c2 d2
3 a3 b3 c3 d3
0 n1 n2 n3 n4
C:\Users\Playdata\AppData\Local\Temp\ipykernel_4216\1078843671.py:2: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
print(df1.append(new_row_df))
In [29]:
# 데이터 프레임의 인덱스를 0부터 다시 지정 (ignore_index = True)
data_dict = {'A':'n1', 'B':'n2', 'C':'n3', 'D':'n4'}
print(df1.append(data_dict, ignore_index = True))
A B C D
0 a0 b0 c0 d0
1 a1 b1 c1 d1
2 a2 b2 c2 d2
3 a3 b3 c3 d3
4 n1 n2 n3 n4
C:\Users\Playdata\AppData\Local\Temp\ipykernel_4216\1548248928.py:3: FutureWarning: The frame.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
print(df1.append(data_dict, ignore_index = True))
다양한 방법으로 데이터 연결하기¶
1. ignore_index 인자 사용¶
In [30]:
row_concat_i = pd.concat([df1, df2, df3], ignore_index=True)
print(row_concat_i)
A B C D
0 a0 b0 c0 d0
1 a1 b1 c1 d1
2 a2 b2 c2 d2
3 a3 b3 c3 d3
4 a4 b4 c4 d4
5 a5 b5 c5 d5
6 a6 b6 c6 d6
7 a7 b7 c7 d7
8 a8 b8 c8 d8
9 a9 b9 c9 d9
10 a10 b10 c10 d10
11 a11 b11 c11 d11
2. 열 방향으로 데이터 연결¶
In [31]:
# axis =1 은 열을 의미, 기본값은 0
col_concat = pd.concat([df1, df2, df3], axis = 1)
print(col_concat)
A B C D A B C D A B C D
0 a0 b0 c0 d0 a4 b4 c4 d4 a8 b8 c8 d8
1 a1 b1 c1 d1 a5 b5 c5 d5 a9 b9 c9 d9
2 a2 b2 c2 d2 a6 b6 c6 d6 a10 b10 c10 d10
3 a3 b3 c3 d3 a7 b7 c7 d7 a11 b11 c11 d11
In [32]:
print(col_concat['A'])
A A A
0 a0 a4 a8
1 a1 a5 a9
2 a2 a6 a10
3 a3 a7 a11
In [33]:
col_concat['new_col_list'] = ['n1', 'n2', 'n3', 'n4']
print(col_concat)
A B C D A B C D A B C D new_col_list
0 a0 b0 c0 d0 a4 b4 c4 d4 a8 b8 c8 d8 n1
1 a1 b1 c1 d1 a5 b5 c5 d5 a9 b9 c9 d9 n2
2 a2 b2 c2 d2 a6 b6 c6 d6 a10 b10 c10 d10 n3
3 a3 b3 c3 d3 a7 b7 c7 d7 a11 b11 c11 d11 n4
In [34]:
# ignore_index : 열 이름 다시 지정
print(pd.concat([df1, df2, df3], axis=1, ignore_index=True))
0 1 2 3 4 5 6 7 8 9 10 11
0 a0 b0 c0 d0 a4 b4 c4 d4 a8 b8 c8 d8
1 a1 b1 c1 d1 a5 b5 c5 d5 a9 b9 c9 d9
2 a2 b2 c2 d2 a6 b6 c6 d6 a10 b10 c10 d10
3 a3 b3 c3 d3 a7 b7 c7 d7 a11 b11 c11 d11
공통 열과 공통 인덱스만 연결¶
In [35]:
df1.columns = ['A', 'B', 'C', 'D']
df2.columns = ['E', 'F', 'G', 'H']
df3.columns = ['A', 'C', 'F', 'H']
print(df1)
print(type(df1))
A B C D
0 a0 b0 c0 d0
1 a1 b1 c1 d1
2 a2 b2 c2 d2
3 a3 b3 c3 d3
<class 'pandas.core.frame.DataFrame'>
In [36]:
print(df2)
print(df3)
E F G H
0 a4 b4 c4 d4
1 a5 b5 c5 d5
2 a6 b6 c6 d6
3 a7 b7 c7 d7
A C F H
0 a8 b8 c8 d8
1 a9 b9 c9 d9
2 a10 b10 c10 d10
3 a11 b11 c11 d11
In [37]:
# 데이터 프레임에 없는 열 이름의 데이터는 누락값으로 처리
row_concat = pd.concat([df1, df2, df3])
print(row_concat)
A B C D E F G H
0 a0 b0 c0 d0 NaN NaN NaN NaN
1 a1 b1 c1 d1 NaN NaN NaN NaN
2 a2 b2 c2 d2 NaN NaN NaN NaN
3 a3 b3 c3 d3 NaN NaN NaN NaN
0 NaN NaN NaN NaN a4 b4 c4 d4
1 NaN NaN NaN NaN a5 b5 c5 d5
2 NaN NaN NaN NaN a6 b6 c6 d6
3 NaN NaN NaN NaN a7 b7 c7 d7
0 a8 NaN b8 NaN NaN c8 NaN d8
1 a9 NaN b9 NaN NaN c9 NaN d9
2 a10 NaN b10 NaN NaN c10 NaN d10
3 a11 NaN b11 NaN NaN c11 NaN d11
In [38]:
print(pd.concat([df1, df2, df3], join='inner'))
#공통 열만 골라서 연결하려면 join 인자를 inner로 지정
# 3프레임의 공통 열을 연결한 결과
Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
In [39]:
print(pd.concat([df1, df3], join='inner'))
A C
0 a0 c0
1 a1 c1
2 a2 c2
3 a3 c3
0 a8 b8
1 a9 b9
2 a10 b10
3 a11 b11
In [40]:
df1.index = [0,1,2,3]
df2.index = [4,5,6,7]
df3.index = [0,2,5,7]
print(df1)
print(df2)
print(df3)
A B C D
0 a0 b0 c0 d0
1 a1 b1 c1 d1
2 a2 b2 c2 d2
3 a3 b3 c3 d3
E F G H
4 a4 b4 c4 d4
5 a5 b5 c5 d5
6 a6 b6 c6 d6
7 a7 b7 c7 d7
A C F H
0 a8 b8 c8 d8
2 a9 b9 c9 d9
5 a10 b10 c10 d10
7 a11 b11 c11 d11
In [41]:
col_concat = pd.concat([df1, df2, df3], axis=1)
print(col_concat)
A B C D E F G H A C F H
0 a0 b0 c0 d0 NaN NaN NaN NaN a8 b8 c8 d8
1 a1 b1 c1 d1 NaN NaN NaN NaN NaN NaN NaN NaN
2 a2 b2 c2 d2 NaN NaN NaN NaN a9 b9 c9 d9
3 a3 b3 c3 d3 NaN NaN NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN NaN a4 b4 c4 d4 NaN NaN NaN NaN
5 NaN NaN NaN NaN a5 b5 c5 d5 a10 b10 c10 d10
6 NaN NaN NaN NaN a6 b6 c6 d6 NaN NaN NaN NaN
7 NaN NaN NaN NaN a7 b7 c7 d7 a11 b11 c11 d11
In [42]:
print(pd.concat([df1, df3], axis=1, join='inner'))
A B C D A C F H
0 a0 b0 c0 d0 a8 b8 c8 d8
2 a2 b2 c2 d2 a9 b9 c9 d9
반응형
'데이터분석' 카테고리의 다른 글
[23.06.15] Python 누락 값 처리 - 10(3) (0) | 2023.06.15 |
---|---|
[23.06.15] Python merge - 10(2) (0) | 2023.06.15 |
[23.06.14] Python Seaborn - 09(2) (0) | 2023.06.14 |
[23.06.14] Python Seaborn - 09(1) (0) | 2023.06.14 |
[23.06.13] Python Series, DataFrame - 08(4) (0) | 2023.06.13 |