我在词典中有一些数据框,并且我想使用公用列“日期”合并所有这些数据框。为此,我使用了以下代码:
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)。
当我运行该代码时,由于行数和列数均增加,因此出现内存错误。但是,只有列数必须增加。我不明白为什么会得到这个结果。
有人可以解释一下如何处理这种情况吗?
谢谢您的帮助。如果您需要更多信息,请告诉我:)
答案 0 :(得分:1)
您很可能重复了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