我从Pandas 0.17.0开始,我无法理解如何使用pd.merge创建我的sql查询,我创建了一个小数据集,我的测试工作正常,但是对于大数据,行为是奇怪。
我的测试包含两个文件.csv,其中包含以下数据file1.csv
id,date,hour,phone_1,phone_2,amount
60000036,08/26/2015,00:17:14,3313268623,445466,1.048
60000036,08/31/2015,05:53:15,3313268623,443316260350,1.048
和我的file2.csv
id,date,hour,phone_1,phone_2
60000036,08/31/2015,05:53:12,3313268623,443316260350
我在ipython(4.0.0)
中运行以下命令 left = pd.read_csv('file1.csv', low_memory=False)
right = pd.read_csv('file2.csv', low_memory=False)
result = pd.merge(left, right, on=['id', 'phone_1','date'], how='left')
# at this point, my output is correct
,id,date,hour_x,phone_1,phone_2_x,amount,hour_y,phone_2_y
0,60000036,08/26/2015,00:17:14,3313268623,445466,1.048,NaN,NaN
1,60000036,08/31/2015,05:53:15,3313268623,443316260350,1.048,05:53:12,443316260350
但是对于大数据,合并失败了我的输出使用大数据(两个文件,大约100mb):
,id,date,hour_x,phone_1,phone_2_x,amount,hour_y,phone_2_y
1313261,60000036,08/26/2015,00:17:14,523313268623,522666,0.048,
1571672,60000036,08/31/2015,05:53:15,523313268623,523316260800,0.048,
使用大文件时,合并始终将hour_y
和phone_2_y
设置为NaN,但对于所有记录都不是。
在SQL中运行正常但速度太慢:
SELECT *
from calls_a LEFT JOIN calls_b v ON
v.id = t.id AND v.phone_a = t.phone_a AND v.date = t.date;
我无法弄清楚发生了什么。