ArrayIndexOutOfBoundsException
означает, что вы пытаетесь получить доступ к индексу массива, который не существует или не связан с границей этого массива. Индексы массива начинаются с 0 и заканчиваются на длину - 1.
В вашем случае
for(int i = 0; i<=name.length; i++) {
System.out.print(name[i] +'\n'); // i goes from 0 to length, Not correct
}
ArrayIndexOutOfBoundsException
происходит, когда вы пытаетесь получить доступ к элементу index.length, который делает не существует (индекс массива заканчивается на -1). просто заменяя & lt; = с & lt; решит эту проблему.
for(int i = 0; i < name.length; i++) {
System.out.print(name[i] +'\n'); // i goes from 0 to length - 1, Correct
}
Вам нужно к stack
кадр данных, так, чтобы можно было использовать str
средство доступа на сложенных значениях. Это дает Вам булевскую переменную для каждого значения ячейки кадра данных. unstack
это и затем .any(1)
seturn, является ли какой-либо элемент Правда, по строке.
df[df.stack().str.contains('--->').unstack().any(1)]
Вывод:
A B C
0 1--->3 2 5
2 6 --->8 4
3 4 2--->
Это, кажется, работает
import pandas as pd
df = pd.DataFrame({'A': ['1--->3', '4', '6', ''], 'B': ['2', '4', '--->8', '4'], 'C': ['5', '0', '4', '2--->']})
print(df)
print('~~~~~~~~~~~~~~~~~~~~~~~')
filtered_df = df[(df['A'].str.contains('--->')) | (df['B'].str.contains('--->')) | (df['C'].str.contains('--->'))]
print(filtered_df)
выход
A B C
0 1--->3 2 5
1 4 4 0
2 6 --->8 4
3 4 2--->
~~~~~~~~~~~~~~~~~~~~~~~
A B C
0 1--->3 2 5
2 6 --->8 4
3 4 2--->
Еще один способ сделать это - просто применить функцию с лямбдой
def only_arrow(row):
for r in row:
if "-->" in r:
return True
return False
и применить ее к вашему df (это даст вам значения true / false как ряды):
result = df.apply(lambda x : only_arrow(x), axis=1)
0 True
1 False
2 True
3 True
удалить индексы, где это «ложно»
df.drop(result[result==False].index, inplace=True)
результат: