如何在 python 列表中找到所有行的开始和结束索引

Posted

技术标签:

【中文标题】如何在 python 列表中找到所有行的开始和结束索引【英文标题】:How do I find start and end indices in python list for all the rows 【发布时间】:2021-11-02 18:26:34 【问题描述】:

我的代码 -

df=pd.read_csv("file")
l1=[]
l2=[]
for i in range(0,len(df['unions']),len(df['district'])):
    l1.append(' '.join((df['unions'][i], df['district'][i])))
    l2.append(("entities": [[(ele.start(), ele.end() - 1) for ele in re.finditer(r'\S+', df['unions'][i])] ,df['subdistrict'][i]],))

TRAIN_DATA=list(zip(l1,l2))
print(TRAIN_DATA)

结果 - [('Dhansagar Bagerhat', 'entities': [[(0, 8)], 'Sarankhola'])]

我的预期输出 - [('Dhansagar Bagerhat', 'entities': [[(0, 8)], 'Sarankhola'],[[(10, 17)], 'AnyLabel'])] 如何获得所有行的输出?我只得到一排的结果。看来我的循环不起作用。谁能指出我的错误?

我的 csv 文件如下所示。 “AnyLabel”是另一列。我有大约 500 行 -

unions        subdistrict   district 
Dhansagar     Sarankhola    Bagerhat 
Daibagnyahati Morrelganj    Bagerhat 
Ramchandrapur Morrelganj    Bagerhat 
Kodalia       Mollahat      Bagerhat

【问题讨论】:

向我们展示原始数据框。 能否将其复制并粘贴为文本? 是的,我已经添加了文本格式 【参考方案1】:

尝试使用str.join

df=pd.read_csv("file")
l1=[]
l2=[]

for idx, row in df.iterrows():
    l1.append(' '.join((row['unions'], row['district'])))
    l2.append(("entities": [[[ele.start(), ele.end() - 1], ele.group(0)] for ele in re.finditer(r'\S+', ' '.join([row['unions'] ,row['subdistrict']]))]))
    

TRAIN_DATA=list(zip(l1,l2))
print(TRAIN_DATA)

输出:

[('Dhansagar Bagerhat', 'entities': [[[0, 8], 'Dhansagar'], [[10, 19], 'Sarankhola']]), ('Daibagnyahati Bagerhat', 'entities': [[[0, 12], 'Daibagnyahati'], [[14, 23], 'Morrelganj']]), ('Ramchandrapur Bagerhat', 'entities': [[[0, 12], 'Ramchandrapur'], [[14, 23], 'Morrelganj']]), ('Kodalia Bagerhat', 'entities': [[[0, 6], 'Kodalia'], [[8, 15], 'Mollahat']])]

【讨论】:

在这里遇到同样的错误。 l1.append(' '.join((row['unions'], row['district']))) TypeError: tuple indices must be integers or slices, not str 实际上我又遇到了同样的错误。 l1.append(' '.join((row['unions'], row['district']))) TypeError: sequence item 0: expected str instance, float found 另外,你能看看我的预期输出吗?我想为这两个词都有索引 它适用于另一个 csv 文件。这是联合专栏的问题。谢谢 但我的预期输出不同【参考方案2】:

您使用 range 错误,您基本上是在告诉它迭代从 0 到 len(df['unions']) 的所有数字,但要以相同长度的 len(df['district']) 的步骤进行。所以你基本上是在告诉它只遍历第一行。您可以通过打印行号来查看:

for i in range(0,len(df['unions']),len(df['district'])):
    print(i)

另外,你不应该像那样迭代行,而是使用df.iterrows()

df=pd.read_csv("file")
l1=[]
l2=[]

for i, row in df.iterrows():
    l1.append(' '.join((row['unions'], row['district'])))
    l2.append(("entities": [[(ele.start(), ele.end() - 1) for ele in re.finditer(r'\S+', ' '.join([row['unions'] ,row['subdistrict']]))]]))

【讨论】:

@U12-Forward 你能指出在哪里吗?我会解决的 花括号。 但是我得到这个错误 l1.append(' '.join((row['unions'], row['district']))) TypeError: tuple indices must be integers or slices,不是str @bellatrix 对不起,我忘记了i,用编辑后的版本再试一次 但它是浮动的。 l1.append(' '.join((row['unions'], row['district']))) TypeError: sequence item 0: expected str instance, float found

以上是关于如何在 python 列表中找到所有行的开始和结束索引的主要内容,如果未能解决你的问题,请参考以下文章

如何在python中找到事件的开始时间和结束时间?

如何使用Scala计算Spark中数据框中列的开始索引和结束索引之间的行的平均值?

如何找到 DataFrame 行的所有组合?

python中日期范围之间的月份开始日期和结束日期

如何在python中确定视频的开始时间和结束时间(自纪元以来的秒数)?

如何在python 3中找到列表中所有数字的因数? [关闭]