#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. Я попробовал версию этого решения для моей проблемы и получил синтаксическую ошибку: недопустимый синтаксис