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