我应该如何基于公共列合并表?

时间:2020-04-07 06:58:13

标签: python pandas join

我目前正在尝试使用以下方法将两个不同的数据集与称为Ccode的同一列组合在一起:

import pandas as pd
data_a = pd.read_csv(r'system.csv', encoding = 'cp949')
data_b = pd.read_csv(r'Seoul.csv', encoding = 'cp949')
pd.merge(data_a, data_b, how = 'left', on = 'Ccode')

此错误消息没有得到合并的表,而是不断弹出:

MemoryError: Unable to allocate 73.7 GiB for an array with shape (162, 61021050) and data type int64

我应该尝试其他方法还是我的代码有问题?

编辑:这是我正在使用的数据的示例:

data_a = pd.DataFrame({'Ccode': [11260, 11203, 12121, 13101, 11002], 'Dname': ['Jonggu', 'Jongnogu', 'Seongbukgu', 'Mapogu', 'Dongdaemungu'], Xcoor [205310, 210191, 199768, 200974, 198397], Ycoor[445727, 446339, 452273, 451975, 451624]}, 
                      columns=['Ccode', 'Dname', 'Xcoor', 'Ycoor'])




data_b = pd.DataFrame({'Ccode': [12260, 11133, 11001, 11591, 10000], 'Acode': ['11', '11', '11', '11', '11'], Opostc [135080, 153010, 143200, 157812, 138735], Npostc[6149, 8545, 4992, 7619, 5510]}, 
                          columns=['Ccode', 'Acode', 'Opostc', 'Npostc'])

data_a中有33列,data_b中有168列。这两个数据集共享的唯一列是“ Ccode”,

1 个答案:

答案 0 :(得分:1)

为什么不呢?

import pandas as pd
data_a = pd.read_csv(r'system.csv', encoding = 'cp949')
data_b = pd.read_csv(r'Seoul.csv', encoding = 'cp949')
data_a.join(data_b.set_index('Copde'), on = 'Ccode')

尽管看来您仍然遇到一些内存问题(即结果文件太大,无法容纳在内存中)。

我的猜测是,由于未指定索引,merge试图在加载数据帧时使用默认的数字索引,这可能最终导致您拥有的列数量激增。或者,两个数据帧中的列Ccode都不匹配数据类型(请检查NA是否都应为int,因为它们可能会转换为float或{{1 }}。