我目前正在尝试使用以下方法将两个不同的数据集与称为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”,
答案 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 }}。