#python #mysql #pandas
#python #mysql #pandas
Вопрос:
Я хочу перенести данные CSV в таблицу MySQL.
Я прочитал CSV, который содержит все типы данных с помощью приведенной ниже команды: file = pd.read_csv(‘abc.csv’)
Для переноса в MySQL используется следующая команда: file.to_sql(con=engine, name=’abc’, if_exists=’replace’, index=True, dtype=None, method=None)
Это отправляет данные в таблицу MySQL, но принимает тип данных как «text», «bigint», но я хочу, чтобы это было как «varchar» и «int»….
CSV содержит 50 столбцов, поэтому, чтобы преодолеть эту проблему, я попробовал только для 3 полей, с dtype={‘index’: sql_types.INT, ‘Идентификатор сотрудника’: sql_types.INT, ‘Имя сотрудника’: sql_types.VARCHAR(255)} и это сработало!
Теперь мне нужно добавить оставшиеся 47 полей в этот словарь dtype,
итак, я хочу знать, есть ли какой-либо способ автоматически преобразовать тип данных без указания имени его столбца, например .., когда поля числовые, преобразуйте его в INT, когда поля буквенно-цифровые, преобразуйте его в VARCHAR, когда поля имеют тип даты, преобразуйте его в datetime, и этих трех строк будет достаточно.
Ответ №1:
После чтения в CSV вы можете просмотреть столбцы и изменить их:
for col in list(df):
if df[col].dtype == 'O':
df[col] == df[col].astype(sql_types.VARCHAR(255))
elif df[col].dtype == 'int':
df[col] == df[col].astype(sql_types.INT)
Предполагается, что вы импортировали их sql_types
откуда-то, потому что они не являются встроенными в Pandas. Но вы сказали, что смогли их использовать.
Если у вас есть формат даты, вы можете выполнить попытку / except для преобразования в pd.datetime
и, если это так, сохранить их как тип даты SQL.