在本例中,每一行代表一个实体。 列“0”是指向其dbpedia页面的链接,“1”列表示标签,“2”列表示索引。它从1开始计数
最后我想要的是一个链接列表,例如列“1”,但按列“2”排序
我已经用同样的方法处理了很多其他的表,但是对于这个表,这个方法似乎失败了,我不知道为什么
import pandas as pd
entities = pd.read_csv("24142265_0_4577466141408796359.csv", header=None)
entitiesUri = [str(ent) for ent in entities[0]]
tmp = entitiesUri.copy()
#I sort 'entitiesUri' by the second column in 'entities' and the index of the link in tmp
entitiesUri.sort(key = lambda k: int(entities[2][tmp.index(k)]))
我创建了entitiesUri(tmp)的副本,以确保sort()方法在使用lambda函数中必须排序的列表时不会出错
这是“entitiesUri”的打印:
它没有按索引对链接进行排序,但似乎也没有按字母顺序进行排序。但不知何故,它把相同的游戏以随机顺序聚在一起
我也用过
entitiesUri = sorted(entitiesUri, key = lambda k: int(entities[2][tmp.index(k)]))
而不是sort(),但结果相同
到目前为止,唯一对我起作用的是Pandas的sort_values()函数
entities = entities.sort_values(2)
entitiesUri = [ent for ent in entities[0]]
结果正确:
但是这种方法让我慢了很多。知道为什么sort()和sorted()会中断吗
我已经链接到dropbox,如果你想亲自试用,你可以在那里下载.csv文件
https://www.dropbox.com/s/ld8u4td5rk4vn71/24142265_0_4577466141408796359.csv?dl=0
第一种方法不能像您预期的那样工作的原因是,您的输入在URL列中有重复项,并且
list.index()
返回第一个项的索引因此,例如,
key = lambda k: int(entities[2][tmp.index(k)])
返回3
(数据帧最后一列中的值,用于上述URL的第一次出现)用于数据帧中的所有3次出现因为
3
是最小的值(您可以通过从上面的列表中删除if
语句来验证这一点),所以URL会首先出现在sorted()
和sort()
的输出中,并出现3次。删除if
语句也会清楚地说明为什么排序entitiesUri
会产生您得到的结果相关问题 更多 >
编程相关推荐