有什么办法可以动态地将默认数据类型(CSV)更改为MySQL数据类型

时间:2019-04-02 11:08:55

标签: python mysql pandas

我想将CSV数据传输到MySQL表。

我已阅读CSV,其中包含使用以下命令的所有类型的数据: 文件= pd.read_csv('abc.csv')

要使用以下命令传输到MySQL: file.to_sql(con = engine,name ='abc',if_exists ='replace',index = True,dtype = None,method = None)

这会将数据发送到MySQL表中,但它的数据类型为“文本”,“ bigint”,但我希望其为“ varchar”和“ int”。...

CSV有50列,因此,为解决此问题,我仅尝试了3个字段,其中dtype = {'index':sql_types.INT,'Employee ID':sql_types.INT,'Employee Name':sql_types.VARCHAR( 255)},就可以了!

现在我必须将剩余的47个字段添加到此dtype字典中,

所以我想知道,是否有任何方法可以自动转换数据类型而不提及其列名,例如..,当字段为数字时将其转换为INT,当字段为字母数字时将其转换为VARCHAR,当字段为日期类型将其转换为日期时间,这三行就足够了。

1 个答案:

答案 0 :(得分:1)

阅读CSV文件后,您可以遍历cols并进行更改:

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内置的。但是您说您可以使用它们。

如果您使用日期格式,则可以进行try / except转换为pd.datetime,如果是,则将其保存为SQL日期类型。