Как найти начальный и конечный индексы в списке python для всех строк

#python #pandas #list #dataframe #loops

Вопрос:

Мой код —

 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-файл выглядит так. «Любая метка» — это еще одна колонка. У меня около 500 строк —

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

Комментарии:

1. Покажите нам исходный кадр данных.

2. Не могли бы вы, пожалуйста, скопировать и вставить его в виде текста?

3. Да, я добавил текстовый формат

Ответ №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']]})]
 

Комментарии:

1. Получаю ту же ошибку здесь. l1.добавить(‘ ‘.присоединиться((строка[‘союзы’], строка[‘округ’]))) Ошибка типа: индексы кортежа должны быть целыми числами или срезами, а не str

2. На самом деле я снова получаю ту же ошибку. l1.добавить(‘ ‘.присоединиться((строка[‘союзы’], строка[‘округ’]))) Ошибка типа: элемент последовательности 0: ожидаемый экземпляр str, найден с плавающей точкой

3. Кроме того, не могли бы вы, пожалуйста, ознакомиться с моими ожидаемыми результатами? Я хотел иметь индексы для обоих слов

4. Это сработало для другого csv-файла. Это была проблема с колонкой «Юнион». Спасибо

5. Но мой ожидаемый результат отличается

Ответ №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']]))]]}))
 

Комментарии:

1. @U12-Вперед, не могли бы вы указать, где, пожалуйста? Я все исправлю

2. Фигурная скобка.

3. Но я получаю эту ошибку l1.append(‘ ‘.join((строка[‘союзы’], строка[‘округ’]))) Ошибка типа: индексы кортежа должны быть целыми числами или срезами, а не str

4. @bellatrix извините , я забыл i , попробуйте еще раз с отредактированной версией

5. Но он становится таким же плавучим. l1.добавить(‘ ‘.присоединиться((строка[‘союзы’], строка[‘округ’]))) Ошибка типа: элемент последовательности 0: ожидаемый экземпляр str, найден с плавающей точкой