varchar值将存储为小数

时间:2018-02-15 16:29:29

标签: python mysql sql pandas mysql-workbench

我创建了一个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 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 个答案:

答案 0 :(得分:1)

这可能会有所帮助:

  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))

答案 1 :(得分:0)

JNevillxQbertSChowdhury的帮助之后,我发现在将数据加载到数据库之前,只需在我的Python代码中添加一行:

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