SyntaxError: ключевое слово Python недопустимый идентификатор в запросе numexpr

#python #python-3.x #pandas #dataframe #syntax-error

#python #python-3.x #pandas #фрейм данных #синтаксическая ошибка

Вопрос:

Я пытаюсь создать меньшую стратифицированную выборку, чтобы сократить время обработки.

Запуск этого кода:

 df_strat= stratified_sample(df, ["Parental Status","Gender", "Age", "Geographical Residence", "Highest Level of Education", "Industry","725", "899","1125", "1375", "1625", "1875", "2500","3000"], size=None, keep_index=True)
  

Это функция:

 def stratified_sample(df, strata, size=None, seed=None, keep_index= True): population = len(df)
    size = __smpl_size(population, size)
    tmp = df[strata]
    tmp['size'] = 1
    tmp_grpd = tmp.groupby(strata).count().reset_index()
    tmp_grpd['samp_size'] = round(size/population * tmp_grpd['size']).astype(int)

    # controlling variable to create the dataframe or append to it
    first = True 
    for i in range(len(tmp_grpd)):
        # query generator for each iteration
        qry=''
        for s in range(len(strata)):
            stratum = strata[s]
            value = tmp_grpd.iloc[i][stratum]
            n = tmp_grpd.iloc[i]['samp_size']

            if type(value) == str:
                value = "'"   str(value)   "'"
            
            if s != len(strata)-1:
                qry = qry   stratum   ' == '   str(value)  ' amp; '
            else:
                qry = qry   stratum   ' == '   str(value)
        
        # final dataframe
        if first:
            stratified_df = df.query(qry).sample(n=n, random_state=seed).reset_index(drop=(not keep_index))
            first = False
        else:
            tmp_df = df.query(qry).sample(n=n, random_state=seed).reset_index(drop=(not keep_index))
            stratified_df = stratified_df.append(tmp_df, ignore_index=True)
    
    return stratified_df
  

Я получаю это возвращенное:

 File "<unknown>", line 1
    Parental Status =='False'and Gender =='F'and Age =='20-29'and Geographical Residence =='Adelaide'and Highest Level of Education =='1'and Industry =='A'and 725 ==13 and 899 ==14 and 1125 ==5 and 1375 ==0 and 1625 ==0 and 1875 ==0 and 2500 ==0 and 3000 ==0
             ^
SyntaxError: Python keyword not valid identifier in numexpr query
  

У других людей с этим кодом ошибки были символы, вызывающие эту проблему, но мои данные чистые и либо объектные, либо данные int32.

Кто-нибудь знает, что может быть причиной этой проблемы?

Комментарии:

1. Как вы можете видеть из ошибки, qry создаваемое вами не соответствует синтаксису Python. В частности, Parental Status не может быть интерпретировано. Я не могу сказать, что это значит, вам нужно будет отладить вашу программу, чтобы выяснить, почему она сгенерирована…

2. Просматривая query документы , вы можете захотеть окружить обратными ссылками, `Parental Status`

Ответ №1:

Похоже, проблему можно решить, удалив пробелы между заголовками столбцов.
Например. "Parental Status" to "Parental_Status" решил проблему.

Ответ №2:

При использовании метода необходимо использовать обратные метки, чтобы окружать имена столбцов пробелами query :

 df.query( `Parental Status` == 'False' )
  

Комментарии:

1. Я попробовал версию этого решения для моей проблемы и получил синтаксическую ошибку: недопустимый синтаксис