代码之家  ›  专栏  ›  技术社区  ›  Aditya

varchar值存储为小数

  •  1
  • Aditya  · 技术社区  · 6 年前

    我创建了一个SQL表,它有一个类型为“ID”的列 varchar(10)

    现在,当我分析CSV文件并将其加载到此表中时,ID列的值(1,2,3,4,5,…)正在存储为(1.0,2.0,3.0,4.0,5.0,…)。

    我无法推断为什么在SQL中将列类型设置为Varchar时,所有ID都转换为十进制,如何避免这种情况?

    表的create语句:

    CREATE TABLE INFO (
        AsOfDate DATE NOT NULL,
        Employee_ID VARCHAR(10) DEFAULT NULL,
        Emlpoyee_Name VARCHAR(200) DEFAULT NULL,
        Emlpoyee_Designation VARCHAR(200) DEFAULT NULL,
        KEY IDX1_INFO(Employee_ID)
        ) ENGINE = MyISAM DEFAULT CHARSET = latin1;
    

    CSV文件如下所示:

    20180215, 1, John, Data Analyst  
    20180215, 2, Alex, Full Stack Developer  
    20180215, 3, Paul, Senior Manager 
    .  
    .  
    .
    

    要解析文件,我使用简单的Pandas逻辑:

    df = pd.read_csv("/path/to/csv/file/")  
    

    P、 S:我不能将列类型声明为Int,因为有一些ID,如A1、B7等。

    2 回复  |  直到 6 年前
        1
  •  1
  •   SChowdhury    6 年前

    这可能有助于:

      temp=u"""a,b,c,d
        2,2,2,2.0"""
        #after testing replace io.StringIO(temp) to filename
        df = pd.read_csv(io.StringIO(temp), 
                         dtype={'a': int, 'b': float}, 
                         converters={'c': D.Decimal, 'd': D.Decimal})
    print (df)
       a    b  c    d
    0  2  2.0  2  2.0
    
    for i, v in df.iterrows():
        print(type(v.a), type(v.b), type(v.c), type(v.d))
    
        2
  •  0
  •   Aditya    6 年前

    在来自的帮助之后 JNevill , xQbert SChowdhury ,我发现在将数据加载到数据库之前,只需在Python代码中添加一行即可:

    df['Employee_ID'] = df['Employee_ID'].astype('object')