Может сравнивать только объекты DataFrame с одинаковыми метками Ошибка - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь сравнить фрейм данных в каждом CSV-файлы в папке. Я хочу сделать код, который обнаруживает, если (cas> vref_new) или (vref> cas), это даст результат, что файл нестабилизированный подход. Ниже приведен код.

os.chdir("D:\TUGAS\TA\TUYS\Data TA dari Garuda\File Yut dan Dimas\SelesaiTA")
dflist=pd.DataFrame()
for file in  os.listdir("D:\TUGAS\TA\TUYS\Data TA dari Garuda\File Yut dan Dimas\SelesaiTA"):

    df = pd.read_csv(file, skiprows = [0,1,3,4])
    df.columns = [column.replace(" ","_") for column in df.columns]
    df.columns = [column.replace("/","_") for column in df.columns]
    dff = df[(df.ALTITUDE_ABOVE_FIELD_ELEV <= 500) & (df.DISTANCE_TO_THRESHOLD < 5) & (df.LANDING_GEAR_STATUS != "FULL_GRD")]
    cas = dff.iloc[:,10:11].astype('float64').reset_index(drop=True)
    vref = dff.iloc[:,132:133].astype('float64').reset_index(drop=True)
    vref_new = vref+20
    if ((cas>vref_new) or (vref>cas)):
      print('Unstabilized Approach%s ' %file) 

Я уже проверил, что dataframe cas и vref является float и все еще получил ValueError: Может сравнивать только объекты DataFrame с одинаковыми метками. Мы будем благодарны за любую помощь

1 Ответ

0 голосов
/ 29 апреля 2020

Итак, здесь есть пара вопросов. Во-первых, как говорится в ошибке, вы можете сравнивать только идентично помеченные кадры данных. Ваш нет. В одном столбец помечен "COMPUTED_AIR_SPEED", а в другом столбец помечен "VREF_AT_LANDING". Вот тут-то и возникает ошибка. Если вы дадите столбцам одинаковую метку и будете различать guish между двумя наборами данных по имени, которое вы дадите переменной DataFrame, вы не получите эту ошибку.

Когда вы исправите это, вы найду другую ошибку. Эти выражения не разрешаются до одного логического значения True или False. Он возвращает серию, которая имеет True или False для каждой строки, в зависимости от того, какой DataFrame имел большее значение в этом индексе. Поэтому следующим шагом является уменьшение значения с использованием .any() или .all().

Если вы хотите, чтобы он отправлял результат «нестабильного подхода» в файл, если ЛЮБОЙ из строк больше в одном DataFrame, чем другой, используйте .any(), если вам нужно, чтобы все они были лучше перед отправкой результата, используйте .all().

Наконец, предыдущий шаг даст вам Серию с одним логическим значением вместо логического. Просто нажмите .any() в конце, чтобы получить логическое значение:

if ((cas>vref_new).any().any() or (vref>cas)).any().any():
    ....
...