Неожиданное увеличение количества строк после использования dataframe.merge - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть несколько фреймов данных в словаре, и я хочу объединить все эти фреймы данных, используя общий столбец «дата». Для этого я использовал следующий код:

n = len(dictionary)
something = dictionary[dictionnary_keys[0]]
for i in range(1,n):
     something = something.merge(dictionary[dictionnary_keys[i], on="date")
     print(something.shape)

Обратите внимание, что значением каждого словаря является кадр данных pandas, а его форма (500,10). Когда я запускаю этот код, я получаю ошибку памяти, потому что увеличивается как количество строк, так и столбцов ... Однако нужно увеличивать только количество столбцов. Я не понимаю, почему я получаю этот результат. Может кто-нибудь объяснить мне, как справиться с такой ситуацией?

Спасибо за помощь. Если вам нужна дополнительная информация, просто дайте мне знать:)

1 Ответ

0 голосов
/ 04 ноября 2018

Скорее всего, у вас есть дублированные date значения.

Вот краткий пример:

# Generate dict of DatFrame with duplicated 'a'
d = dict()
for i in range(4):
    d[i] = pd.DataFrame({'a': list('ABBCD'), 'b':np.random.randint(0, 10, 5), 'c': i})

n = len(d)
s = d[0]
for i in range(1,n):
    s = s.merge(d[i], on="a")
    print(s.shape)
(7, 5)
(11, 7)
(19, 9)

Повторный запуск без дубликатов:

d = dict()
for i in range(4):
    d[i] = pd.DataFrame({'a': list('ABCDE'), 'b':np.random.randint(0, 10, 5), 'c': i})
n = len(d)
s = d[0]
for i in range(1,n):
    s = s.merge(d[i], on="a")
    print(s.shape)
(5, 5)
(5, 7)
(5, 9)

Объединение таким образом может привести к сложностям с названием вашей серии:

   a  b_x  c_x  b_y  c_y  b_x  c_x  b_y  c_y
0  A    4    0    5    1    0    2    9    3
1  B    5    0    8    1    3    2    0    3
2  C    6    0    0    1    5    2    8    3
3  D    2    0    0    1    8    2    8    3
4  E    8    0    2    1    7    2    9    3

s['b_x']
   b_x  b_x
0    4    0
1    5    3
2    6    5
3    2    8
4    8    7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...