python - varchar 值被存储为小数

标签 python mysql sql pandas mysql-workbench

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

现在,当我解析 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 等。

最佳答案

这可能有帮助:

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

关于python - varchar 值被存储为小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48811978/

相关文章:

php - 计算项目并获得百分比

python - 如何找到 NumPy 数组中的第一个局部最大值?

python - 从 python 字典中的用户输入获取键值

python - 断言错误: Cannot apply DjangoModelPermissionsOrAnonReadOnly on a view that does not set `.queryset` or have a `.get_queryset()` method

mysql - 有效地将表2中的值合并到表1中

sql - 我们可以在 SQL Server 中的两个存储过程之间进行连接吗

python - 将float字符串转换为json中的float

mysql - Spring Boot BCryptPasswordEncoder 编码的密码看起来不像 BCrypt

java - JDBC Batch 执行速度极慢

mysql - 无法添加外键约束 - 数据类型匹配