Я использую pandas для чтения любых файлов CSV, а затем вставляю строки в базу данных. Я буду делать это с помощью SQLAlchemy.
Я не буду знать имена заголовков или размер, поэтому он должен быть динамическим. Предположим, что правила базы данных обеспечат достоверность данных.
Я пытаюсь сопоставить заголовок столбца с каждым значением данных. См. ниже мой текущий фрейм данных:
Example 1 Example 2 Example 3 Example 4
Cat Dog Mouse Horse
Cow Ant Pig Elephant
Вот мой желаемый выводимый список:
Example 1=Cat, Example 2=Dog, Example 3=Mouse, Example 4=Horse
Example 1=Cow, Example 2=Ant, Example 3=Pig, Example 4=Elephant
Я пробовал использовать zip
и iterrows
с кодом ниже:
for index, data in df.iterrows():
mylist.append(data.values)
myzip = zip(columns, mylist)
for z in myzip:
print(z)
но это создает один заголовок столбца для нескольких значений, как показано ниже:
('Example 1', array(['Cat', 'Dog', 'Mouse', 'Horse'], dtype=object))
('Example 2', array(['Cow', 'Ant', 'Pig', 'Elephant'], dtype=object))
Любая помощь будет принята с благодарностью, поскольку я не уверен, какую функцию мне нужно использовать.
Я знаю о to_sql
, но мне нужно создать оператор вставки для каждой строки.
Спасибо
Удивительно большое спасибо за вашу помощь
@giser_yugang нашел идеальное решение. Панды имеет встроенный метод DataFrame.to_dict(orient='dict')
, который преобразует фрейм данных и возвращает словарь, где пара ключ-значение может быть настроена с помощью параметра orient
.
«записи» среди «востока» дают желаемый результат.
Итак, ваш фрейм данных:
После использования:
df.to_dict(orient='records')
дает:
[{'Example 1': 'Cat',
'Example 2': 'Dog',
'Example 3': 'Mouse',
'Example 4': 'Horse'},
{'Example 1': 'Cow',
'Example 2': 'Ant',
'Example 3': 'Pig',
'Example 4': 'Elephant'}]
df.to_dict(orient='records')
поможет вам. Кроме того,SQLAlchemy
поддерживает вставку панд.