我已经编写了一段代码,将使用CSV比较数组中的字符串。 这是示例数据集
Doc Cited_Doc
A B | F | G
B V | T
C A | O | U | P | M
这是我的密码
Input = np.loadtxt('C1_100.csv', delimiter=',' , dtype='unicode')
NumOfDoc = len(Input[:,1])
NumOfCol = len(Input[1,:])
for i in range(1, NumOfDoc):
Cited = Input[:,1]
Citing = Input[:,0]
bb=1
for i in range(1, NumOfDoc):
for j in range(1, NumOfDoc):
#aa = np.core.defchararray.equal(Citing, Cited)
aa = np.isin(Citing, Cited)
CitingCited = []
if np.all(aa!=0):
if bb==1:
#CitingCited = [Citing[j],Citing[i]]
a = np.core.defchararray.add(Citing[j], Citing[i])
CitingCited.append(a)
if bb>1:
#CitingCited[bb,1]= Citing[j]
#CitingCited[bb,1]= Citing[j]
CitingCited.append(Citing[j])
CitingCited.append(Citing[j])
bb=bb+1
print('CitingCited')
在比较之后,我尝试打印aa,结果返回
array([True,True,False])
当我打印CitingQuieted时,结果会被返回
[]
但我希望在打印CitingQuieted时看到结果(返回True的结果)
a = np.core.defchararray.add(Citing[j], Citing[i])
CitingCited.append(a)
像这样
Doc Cited_Doc
A C
B A
有什么建议吗
让我们看看是否可以重新创建您的数据:
然后循环:
在循环中不使用
i
。为什么要循环呢?我想问为什么1在循环中开始,但意识到我的示例没有标题行,您正在跳过在任何情况下,您现在拥有的是两个字符串数据类型的1d数组
在下一步中,您将再次循环两次整个列,而不是
i'th
或j'th
元素这个}的元素没有一个出现在{}中(是的,'B'是'B | F | G'中的子串),但这不是{}测试的目的
isin
应该检测什么?它比较两个数组的元素。{如果我们在“|”上拆分
cited
的元素,我们就可以对citing
的元素进行测试我们可以使用普通字符串操作来测试在
cited
字符串中找到哪些citing
字符串:我可以继续讲下去,但现在很清楚,这并不是一个真正的
numpy
问题事实上,为了更加明确:
而且{}可以进一步分成一个列表:
正如我在一篇评论中所写的,
pandas
使用对象数据类型作为字符串,字符串是普通的Python字符串。numpy
而是使用<U9
字符串数据类型。我不知道pandas
是否添加了字符串实用程序,但我怀疑普通的Python字符串实用程序就足够了np.char
有一些函数可以将字符串方法应用于数组的元素。它们可能很方便,但没有提供任何速度改进也可以执行
Out[32]
拆分:{}只是访问这些函数的另一种方式:
你用
Cited
和Citing
作为两个列名是令人困惑的。是的,它们的意思不同,但我必须不断引用定义来跟踪哪个变量是哪个变量。一个是docs
的列表,另一个是引用列表我的建议-现在跳过整个
pandas
和numpy
用法,集中精力让字符串匹配正确。这是一个Python字符串列表问题。确保您的迭代在每一步都有意义相关问题 更多 >
编程相关推荐