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 |