Re: [问题] pandas.to_csv 字串型态的数字

楼主: Hsins (翔)   2019-12-25 12:23:21
※ 引述《nepholi (我不是砲哥)》之铭言:
: Hi all,
: 小弟刚接触Py没多久
: 经历只有用google大神边查边学基本语法
: 然后只拼出一套暴力型爬虫
: 所以可能有些东西不知道怎么查或找错方向再请各位指教
: 这次要处理一笔资料是excel档要转成csv给后续一支正常运作中的C++读取
: 其中excel的内容为 (以下为虚构)
: 部门 | 卡号 | 名字 | 时间 |
: ABC | 00010 | John | 2019/12/25 08:00:01 |
: ABC | 00011 | Tom | 2019/12/25 08:02:55 |
: ..以此类推
: 用最直接的写法
: df = pd.read_excel('test.xlsx', usecols="A:D", dtype={'卡号':str})
: 可以成功读进我想要的资料及型态
: 1.卡号为str (为了保留完整五位数)
: 2.日期为datatime
: 然后
: df.to_csv('hello.csv', index=None, header=True, encoding='utf-8-sig',
: quoting=csv.QUOTE_NONNUMERIC)
: 这句跑完之后产出的csv其中卡号跟日期字段却不是我想要的5位数及显示秒数
: 而是
: 部门 | 卡号 | 名字 | 时间 |
: ABC | 10 | John | 2019/12/25 08:00 |
: ABC | 11 | Tom | 2019/12/25 08:02 |
: 我有想过是不是csv的储存格格式造成
: 日期的部分证实的确是
: 但卡号的部分被默认为"通用格式"导致我的卡号被去掉了前置0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
据我所知,如果你在使用 pandas 读入档案的时候已经有使用 dtype,
或者在后续操作 dataframe 时,有透过 astype 将资料表内容转为字串格式的话。
那么在最后使用 to_csv() 转换成 csv 格式的纯文字档是不会格式跑掉的。
由于你提到了“通用格式”,那么最有可能造成被截去前方零位的原因,
是使用了 Excel, Numbers 或是 LibreOffice 这类试算表软件去打开 csv 档
如果你没有特别规定读入时要进行的格式操作,
这些软件通常会自作聪明地替你处理。
作者: cuteSquirrel (松鼠)   2019-12-25 14:01:00
推。csv的观念解析
作者: moonbright (月明)   2019-12-25 14:17:00
给推~ 解释蛮好的!
作者: kobe760903 (黄金先生)   2019-12-25 16:08:00
请问一下我在to_csv是整数1都会变成1.0是为什么呢试了dtype=str好像就解决了
作者: kobe8112 (小B)   2019-12-25 16:55:00
我自己用其他程式处理CSV的时候如果中间被Excel存取过也很容易出问题,常见的坑都是Windows在档案/编码乱搞
作者: nepholi (我不是砲哥)   2019-12-26 10:52:00
我用纯文字编辑器打开的确卡号的前置0还在 所以是我太下意识地认为要用EXCEL开CSV了= = 原来一直都没事感谢大大

Links booklink

Contact Us: admin [ a t ] ucptt.com