Не удалось получить результаты для поля [{0}] Ошибка TabPy при использовании функции python sql в потоке - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь выполнить SQL запросов в рамках определенной функции. Мне нужен фрейм данных pandas в качестве вывода, но я получаю список, хотя данные кажутся правильными. Вот мой код:

    import pandas as pd
    from pandasql import sqldf
    import pandasql as psql

    cars = {'Brand': ['Honda Civic','Toyota Corolla','Ford Focus','Audi A4'],
                'Price': [22000,25000,27000,35000]}
    df = pd.DataFrame(cars)
    
    
    def test_query(df):
        df = pd.DataFrame(df)
        q = """select * from df"""
    
        df2 = psql.sqldf(q, locals())
        return df2

   test_query(df)

Это возвращает точный pandas фрейм данных, который мне действительно нужен.

Теперь проблема не устранена, когда я запускаю эту функцию для своих данных в Tableau Prep Builder, я получаю сообщение об ошибке

Unable to retrieve results for field [{0}]

Я искал эту ошибку и обнаружил, что «вам нужно использовать команду python, чтобы вернуть что-то, где что-то является списком, содержащим соответствующий тип возвращаемого значения. В противном случае значения могут существовать в python, но Tableau их не видит »

, поэтому я использовал

 ReturnValues = []
 ReturnValues.append(df2)

, но я получаю ту же ошибку, что и Unable to retrieve results for field [{0}]

В чем может быть причина?

Ответы [ 2 ]

1 голос
/ 14 июля 2020

В вашем коде 3 проблемы.

  1. Вы вызываете функцию test_query в рамках определения самой функции test_query.

  2. в функцию, которую вы передаете самому объекту фрейма данных. Таким образом, вам не нужно снова создавать из него новый объект фрейма данных.

  3. в функции test_query вы создаете ReturnValues переменную типа данных списка, а затем добавляете свой запрос результат к этому. Таким образом, вместо этого вы можете напрямую вернуть df2

1 голос
/ 14 июля 2020

Это возвращает список фреймов данных, поэтому просто выберите первый элемент списка, и все готово.

print(test_query(df)[0])
...