ynjay Ответов: 1

Как фильтровать фрейм данных?


Я использую библиотека столярных изделий чтобы использовать фрейм данных в моем проекте. Я смог использовать его для чтения csv файла
DataFrame<Object> shortAndTall = DataFrame.readCsv(myDataFileName);

но теперь я пытаюсь понять, как я могу фильтровать свой фрейм данных?

Что я уже пробовал:

Например. в csv у меня есть высота столбца, и значение либо t - tall, либо s - short, я пытаюсь найти способ получить фрейм данных для каждого из них, что-то вроде:
onlyTall = shortAndTall[shortAndTall.height == "t"]  
onlyShort = shortAndTall[shortAndTall.height == "s"]

Когда я пытаюсь это сделать, я получаю:
The type of the expression must be an array type but it resolved to DataFrame<Object>

Есть идеи, как я могу правильно отфильтровать фрейм данных?

Большое спасибо!

1 Ответов

Рейтинг:
10

Sandeep Mewara

Итак, я просмотрел их документацию (отчасти и для себя, чтобы посмотреть, как они используют ее по сравнению с Python). То, что вы пытаетесь сделать выше, - это код типа Python в Java. Это не сработает.

Прежде чем перейти к тому, как, об ошибке:

Цитата:
Тип выражения должен быть типом массива, но он разрешен в DataFrame<Object>

Это происходит потому, что shortAndTall имеет тип DataFrame<object>. Объект -> Не массив и не список. Таким образом, при попытке замаскировать и получить код сравнения вы получите ошибку. В общем случае вам нужно будет отлить перед использованием. Но только не в этом случае.

Теперь, основываясь на документации там, кажется, что вам нужно использовать интерфейс предикатов для любого фильтра. Если это для вас сложно, сделать комбинации клавиш ctrl+f для предиката слово: DataFrame| Столярные Изделия[^]
Пример фильтра есть:
DataFrame<Object> df = new DataFrame<>("name", "value");
for (int i = 0; i < 10; i++)
    df.append(Arrays.asList("name" + i, i));

df.select(new Predicate<Object>() {
        @Override
        public Boolean apply(List<Object> values) {
             return Integer.class.cast(values.get(1)).intValue() % 2 == 0;
        
     })
  .col(1);
// Output [0, 2, 4, 6, 8] }  

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

Было бы лучше подробно ознакомиться с их документацией, понять ее, а затем обратиться к ней, если вы планируете ее использовать.


ynjay

Спасибо! Поэтому я заглянул в него еще раз, и мне удалось заставить некоторые вещи работать, а теперь я застрял, пытаясь сохранить новые короткие и высокие строки и столбцы в свой собственный фрейм данных.
То, что у меня есть до сих пор, это:
DataFrame<object> shortAndTall = DataFrame.readCsv(myDataFile);

shortAndTall.выберите((предиката в<Объект> У) новый предикат в<объект&ГТ;() {
@Ручная коррекция
public Boolean apply(List<object> record) {
String height = (String) record.get(2);
// System.out.println(высота);
вернуться Fall_ADL."равно" ("Т");
}});

Sandeep Mewara

Приятно знать, что это помогло. Я бы предложил открыть еще один запрос на случай, если сейчас вы столкнулись с другой проблемой. Я в середине чего-то, может быть, кто-то еще сможет помочь.

ynjay

Спасибо, я открою новый вопрос