Pandas内联演出发行

2024-09-30 00:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个csv文件,我把它们加载到pandas数据框中。一个文件很大,大约10M行和20列(都是字符串类型),大小约为1G字节,另一个文件很小,大约5k行,5列,大小约为1M。我想通过两个数据帧之间的一个公共列进行内部连接。在

我就是这样加入的

mergeddataset = pd.merge(smallDataFrame, largeDataFrame, on='uid', how='inner')

我尝试过,如果我采样1%的大数据集,程序运行平稳,没有任何问题,并在5秒钟内完成,所以我验证了我的代码函数应该是可以的。在

但如果我加入真正的大数据集,程序将在大约20-30秒后终止,错误消息是Process finished with exit code 137 (interrupted by signal 9: SIGKILL)。我在macosx上使用的是python2.7和miniconda,运行的是PyCharm。我的机器有16G内存,远远超过1G文件的大小。在

想知道是否有任何想法来调整pandas中数据帧连接的性能,或者其他任何快速的内部连接解决方案?在

我的另一个困惑是,为什么程序会被杀死?由谁和为什么?在

编辑1,错误捕获在/var/log中/系统日志进行内部连接时

^{pr2}$

谨致问候, 林


Tags: 文件csv数据字符串程序类型pandas字节
1条回答
网友
1楼 · 发布于 2024-09-30 00:33:16

检查两边“uid”列的基数。很有可能您的连接正在将数据乘以许多倍。例如,如果在dataframe1的100条记录中有值为1的uid,在dataframe2的10条记录中有值为1的uid,那么连接将产生1000条记录。在

为了检查基数,我将执行以下操作:

df1[df1.uid.isin(df2.uid.unique())]['uid'].value_counts()
df2[df2.uid.isin(df1.uid.unique())]['uid'].value_counts()

此代码将检查出现在其他帧的uid中的“uid”值是否重复。在

相关问题 更多 >

    热门问题