Объект RangeIndex не вызывается

#python #python-3.x #pandas #indexing #slice

#python #python-3.x #pandas #индексирование #фрагмент

Вопрос:

Я считываю значения из текстового файла и пытаюсь найти индекс вложенных строк, как показано ниже

 df=pd.read_csv('break_sent.txt', index_col=False,encoding='utf-8',delimiter="n",names=['sent'])
#print(df[:50])
#df.index = list(df.index)
df1= df[40:50]
print(len(df))
print(df1.index)
print("-------------------------------------------")
for i,row in df1.iterrows():
    string = row['sent']
    #print("string",string)
    d = df1[df1.sent.str.match(string)] # if the result includes more than 1 value then we know that substring and its matching parent string are present, then I will eliminate the substring from the dataframe
    if len(d.index > 2):
        index_val = df.index(string)
        df.drop(df.index(string),inpace=True)
        df.reset_index(level=None, drop=True, inplace=True)
  

когда я запускаю этот код, я получаю приведенную ниже ошибку

 Traceback (most recent call last):
  File "process.py", line 15, in <module>
    index_val = df.index(string)
    TypeError: 'RangeIndex' object is not callable
  

Я попытался преобразовать индекс диапазона в список

 df.index = list(df.index)
  

но затем я получил, что Int64Index не вызывается. Как я могу получить индекс строки?

Ответ №1:

Попробуйте изменить

 df.drop(df.index(string),inpace=True)
  

Для

 df.drop(index=string, inplace=True)
  

Ответ №2:

Вам нужно выполнить df.index во фрейме данных, а не в строке поиска. Итак:

 matched_rows = df.index[df1.sent.str.match(string)]
  

выдаст вам строки, соответствующие вашей строке. Затем вы должны иметь возможность передавать этот вывод в df.drop :

 if len(matched_rows) > 2:
  df.drop(matched_rows, inplace=True)
  df.reset_index(level=None, drop=True, inplace=True)
  

Возможно, я не уловил точных деталей того, что вы пытаетесь сделать, но, надеюсь, это укажет вам правильное направление.