Как сложить несколько фреймов данных Pandas


Часто вы можете захотеть сложить два или более панд DataFrames. К счастью, это легко сделать с помощью функции pandas concat() .

В этом руководстве показано несколько примеров того, как это сделать.

Пример 1. Стек двух фреймов данных Pandas

В следующем коде показано, как «сложить» два кадра данных pandas друг над другом и создать один кадр данных:

import pandas as pd

#create two DataFrames
df1 = pd.DataFrame({'player': ['A', 'B', 'C', 'D', 'E'],
 'points':[12, 5, 13, 17, 27]})

df2 = pd.DataFrame({'player': ['F', 'G', 'H', 'I', 'J'],
 'points':[24, 26, 27, 27, 12]})

#"stack" the two DataFrames together
df3 = pd.concat([df1,df2], ignore_index= True )

#view resulting DataFrame
df3

 player points
0 A 12
1 B 5
2 C 13
3 D 17
4 E 27
5 F 24
6 G 26
7 H 27
8 I 27
9 J 12

Пример 2. Стек из трех фреймов данных Pandas

Аналогичный код можно использовать для наложения трех фреймов данных pandas друг на друга для создания одного фрейма данных:

import pandas as pd

#create three DataFrames
df1 = pd.DataFrame({'player': ['A', 'B', 'C', 'D', 'E'],
 'points':[12, 5, 13, 17, 27]})

df2 = pd.DataFrame({'player': ['F', 'G', 'H', 'I', 'J'],
 'points':[24, 26, 27, 27, 12]})

df3 = pd.DataFrame({'player': ['K', 'L', 'M', 'N', 'O'],
 'points':[9, 5, 5, 13, 17]})

#"stack" the two DataFrames together
df4 = pd.concat([df1,df2, df3], ignore_index= True )

#view resulting DataFrame
df4

 player points
0 A 12
1 B 5
2 C 13
3 D 17
4 E 27
5 F 24
6 G 26
7 H 27
8 I 27
9 J 12
10 K 9
11 L 5
12 M 5
13 N 13
14 O 17

Важность ignore_index

Обратите внимание, что в предыдущих примерах мы использовали ignore_index=True .

Это говорит pandas игнорировать номера индексов в каждом DataFrame и создавать новый индекс в диапазоне от 0 до n-1 для нового DataFrame.

Например, рассмотрим, что происходит, когда мы не используем ignore_index=True при размещении следующих двух кадров данных:

import pandas as pd

#create two DataFrames with indices
df1 = pd.DataFrame({'player': ['A', 'B', 'C', 'D', 'E'],
 'points':[12, 5, 13, 17, 27]},
 index=[0, 1, 2, 3, 4])

df2 = pd.DataFrame({'player': ['F', 'G', 'H', 'I', 'J'],
 'points':[24, 26, 27, 27, 12]},
 index=[2, 4, 5, 6, 9])

#stack the two DataFrames together
df3 = pd.concat([df1,df2])

#view resulting DataFrame
df3

 player points
0 A 12
1 B 5
2 C 13
3 D 17
4 E 27
2 F 24
4 G 26
5 H 27
6 I 27
9 J 12

Результирующий DataFrame сохранил свои исходные значения индекса из двух DataFrame.

Таким образом, вы обычно должны использовать ignore_index=True при объединении двух фреймов данных, если у вас нет особой причины для сохранения исходных значений индекса.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в Pandas:

Как добавить пустой столбец в Pandas DataFrame
Как вставить столбец в фрейм данных Pandas
Как экспортировать фрейм данных Pandas в Excel