使用dataframe.merge

时间:2018-11-04 19:19:14

标签: python pandas

我在词典中有一些数据框,并且我想使用公用列“日期”合并所有这些数据框。为此,我使用了以下代码:

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 :(得分: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