【问题标题】:Is there any way to change default datatype(CSV) to MySQL datatypes dynamically有没有办法将默认数据类型(CSV)动态更改为 MySQL 数据类型
【发布时间】:2019-08-23 16:38:14
【问题描述】:

我想将 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 表中,但它的数据类型为“text”,“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,当字段为date 类型将其转换为 datetime,这三行就足够了。

【问题讨论】:

    标签: python mysql pandas


    【解决方案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 内置的。但是你说你可以使用它们。

    如果您有日期格式,您可以尝试/除以转换为pd.datetime,如果是,则将它们保存为 SQL 日期类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-29
      • 2016-10-15
      • 2016-11-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多