#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, найден с плавающей точкой