Панды df читают каждую строку, возвращают SQL-запрос с новым столбцом в df - PullRequest
0 голосов
/ 07 июня 2018

У меня есть следующий файл данных pandas как df, и я хочу запросить каждую строку df['item'], которая будет возвращать соответствующий item_description из базы данных SQL Server, и заполнить df столбцами 'id', 'qty', 'item', 'item_description'

|  id | qty  | item |
+-----+------+------+
| 001 |  700 | CB04 |
| 002 |  500 |      |
| 003 | 1500 | AB01 |

Я делал следующее:

query = "select item_description from item_book WHERE item in {}".format(tuple(df['item']))

и возвращал его как df с

pd.read_sql_query(query, cnxn)

Результаты:

| item_description |
+------------------+
| apple            |
| orange           |

Я планировал объединить два dfs, но это может не сработать, поскольку у меня есть пустое значение во 2-й строке df, и мой запрос вернул только две строки.

Есть ли более эффективный способ сделать это.

1 Ответ

0 голосов
/ 07 июня 2018

Измените запрос SQL, чтобы он возвращал столбцы item и item_description, чтобы дать вам кадр данных примерно так:

   item item_description
0  CB04            apple
1  AB01           orange

Затем у вас есть общий столбец, который можно использовать для объединения двух кадров данных сmerge function:

pd.merge(original_df, desc_df, on="item", how="left")

Мы могли бы пропустить аргумент on, потому что в каждом кадре данных есть только один столбец с тем же именем, и панды выяснят, к чему они должны быть присоединены.Но аргумент how необходим для сохранения любых строк из первого кадра данных ( слева -много аргумента до merge), у которых нет соответствующей строки во втором кадре данных.Результат:

   id   qty  item item_description
0   1   700  CB04            apple
1   2   500                    NaN
2   3  1500  AB01           orange

Подробнее о слиянии вы можете прочитать в документации pandas .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...