【发布时间】:2018-02-01 15:22:11
【问题描述】:
我正在尝试匹配来自两个列表的数据结果。
第一个数据源来自 MySQL。
第二个数据源来自 csv。
第一个输出(MySQL)或 b 的代码如下:
conn = MySQLdb.connect("localhost", "username", "pwd", "databasename")
cursor = conn.cursor()
query = "select ID from Table1"
cursor.execute(query)
a = [item[0] for item in cursor.fetchall()]
b = ('[{}]'.format(', '.join(a)))
第二个输出 (csv) 或 c 的代码如下:
db = pd.read_csv(File, usercols=['ID'], skiprows=skip)
c = dg['ID'].values.tolist()
第二个数据源是 csv 文件。 我正在尝试使用底部代码来匹配。
set(b).intersection(c)
set(b) & set(c)
但是,我没有看到预期的匹配。
例如,第一个 List 有如下数据:
[111111, 2222, 3333333, 4444444]
第二个列表的数据如下:
[8888888, 2222, 6748987, 3688777, 55555]
我希望得到以下结果:
set([2222])
但我只得到了
set([])
是否有任何原因,例如来自两个列表的数据类型(可能导致不匹配)?
【问题讨论】:
-
运行你的代码给了我预期的结果。
-
>>> x = [111111, 2222, 3333333, 4444444] >>> y = [8888888, 2222, 6748987, 3688777, 55555] >>> set(x) & set(y) {2222}适合我。 -
有什么原因它不能从我这里开始?会不会是因为 Lists 中的 Varchar (MySql) vs. Number (csv) 数据类型?
-
顺便说一句,你在这里做什么疯狂的事情:
b = ('[{}]'.format(', '.join(a)))?然后你不应该比较 a 和 c 而不是 b 和 c 吗? -
那部分只是删除a周围的单引号。 MySql 的原始输出在 (Varchar) 周围都有单引号。所以,我又做了一个过程来删除 a,它是 b。