df.to_sql не работает [HY04] — недопустимый тип данных SQL (0) (SQLBindParameter)

#python #sql #pyodbc

#python #sql #pyodbc

Вопрос:

Я довольно новичок в Python, по крайней мере, в таких проблемах, и боролся с этим в течение нескольких дней!

Я использовал df.to_sql довольно долго и для множества разных фреймов данных, но теперь столкнулся со следующей проблемой / ошибкой:

Ошибка DBAPIError: (pyodbc.Error) (‘HY004’, ‘[HY004] [Microsoft] [Драйвер ODBC SQL Server] Недопустимый тип данных SQL (0) (SQLBindParameter)’)

Мой код выглядит следующим образом:

 **pyodbc.pooling = False
params = urllib.parse.quote_plus("Driver={SQL Server};Server=[ServerName];Database=DatabaseName")
engine = create_engine("mssql pyodbc:///?odbc_connect=%s" % params)**

df.to_sql('Table_Name', 
        con = engine,
            if_exists='replace')
  

Я использовал код для множества разных фреймов данных и понятия не имею, что изменилось для этих конкретных данных? Это из JSON-файла, который я сгладил.

Есть идеи относительно того, что может вызвать это?

Я не использую Linux или что-то еще.

Мой фрейм данных выглядит следующим образом:

        eventId
0      97592224      3361    1609  2086192          1H     0.491250        8   
1      97592225     49876    1609  2086192          1H     3.649639        8   
2      97592168     14853    1631  2086192          1H     5.356103        8   
3      97592169      8730    1631  2086192          1H     8.653246        8   
4      97592170     14763    1631  2086192          1H    10.219569        8   
...         ...       ...     ...      ...         ...          ...      ...   
1667  586886958     14870    1612  2086209          2H  2915.347568        2   
1668  586886947      8292    1624  2086209          2H  2924.483590        3   
1669  586886948    269676    1624  2086209          2H  2926.881486        1   
1670  586886959     25393    1612  2086209          2H  2927.766165        1   
1671  586886949     13484    1624  2086209          2H  2929.858276        8   
  
       eventName  subEventId subEventName  positions.0.x  positions.0.y
0          Pass          85  Simple pass             51             51   
1          Pass          83    High pass             35             48   
2          Pass          85  Simple pass             39             12   
3          Pass          83    High pass             34             23   
4          Pass          82    Head pass             65             24   
...         ...         ...          ...            ...            ...   
1667       Foul          24      Protest             37             90   
1668  Free Kick          36     Throw in             64              0   
1669       Duel          10     Air duel             77             23   
1670       Duel          10     Air duel             23             77   
1671       Pass          83    High pass             74             27   
  
       positions.1.x  positions.1.y  tags.0.id  tags.1.id  tags.2.id tags
0              35.0           48.0     1801.0        NaN        NaN  NaN   
1              61.0           88.0     1802.0        NaN        NaN  NaN   
2              34.0           23.0     1801.0        NaN        NaN  NaN   
3              65.0           24.0     1801.0        NaN        NaN  NaN   
4              85.0           22.0     1801.0        NaN        NaN  NaN   
...             ...            ...        ...        ...        ...  ...   
1667            NaN            NaN     1702.0        NaN        NaN  NaN   
1668           77.0           23.0     1801.0        NaN        NaN  NaN   
1669           74.0           27.0      701.0     1802.0        NaN  NaN   
1670           26.0           73.0      703.0     1801.0        NaN  NaN   
1671            NaN            NaN     1802.0        NaN        NaN  NaN 
  

Отредактировано:

Фрейм данных можно загрузить по этой ссылке: https://drive.google.com/file/d/1r_zpj-24Unb9XXyYlVNwBkMU_YaKC2ll/view?usp=sharing

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

1. Пожалуйста, создайте минимальный фрейм данных, который вызовет ошибку, используйте df.to_pickle("pickled.gz") для сериализации его в файл на диске, затем разместите ссылку для скачивания этого файла, чтобы другие могли воспроизвести проблему.

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

3. Проверьте значение в tags столбце строки с индексом 8. Похоже, что это пустой ряд, и это, похоже, портит работу. Я могу избежать to_sql ошибки, если сделаю df.iloc[8, 17] = None это первым.

4. Большое спасибо за помощь! Очень признателен!!