本篇介紹Python hex string to int 16進位字串轉數字,Python 沒有所謂的hex 的變數型態,所以16 進位都是要轉換到int 去作運算,之後要顯示成16 進位 ... ... <看更多>
字串轉數字python 在 Python 數字、字串的基本運算By 彭彭 - YouTube 的推薦與評價
喜歡彭彭的教學影片嗎?點擊「加入」按紐取得更多會員服務哦。加入會員:https://www.youtube.com/channel/UCguZS ... ... <看更多>
字串轉數字python 在 Re: [問題] pandas.to_csv 字串型態的數字- 看板Python - 批踢踢 ... 的推薦與評價
※ 引述《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 檔
如果你沒有特別規定讀入時要進行的格式操作,
這些軟體通常會自作聰明地替你處理。
---
關於 csv 檔,我們可以看一下 Wiki 上面的說明:
逗號分隔值 (CSV, Comma-Separated Values),其檔案以純文字形式儲存表格資
料(數字和文字)。純文字意味著該檔案是一個字元序列,不含必須像二進位數字
那樣被解讀的資料。
因為通常可以用表格形式表現,所以可以用試算表軟體打開,但是本質是純文字
。建議使用純文字的編輯器,比如:記事本、notepad++、Sublime Text 或者是
VS Code 去開,看看這些數值是不是帶有 leading zero,如果有的話就不用管
他了,你轉換的檔案是正確的,只是試算表自己自作聰明而已,對於後續用 C++
操作是不會有影響的。
至於日期的部份,你也可以同樣在讀入時存成字串就不會有這個問題了。
: 不曉得有沒有辦法可以在python的code裡面去設定這個呢
: 我找了pandas的官網說明to_csv但無斬獲
: 不知道是不是我誤會或漏看了..
: 感謝XD
: P.S. 因為C++裡面讀取卡號後並沒有預設要做補0的動作
: 所以希望能在py這部分就處理掉
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.247.1 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1577247803.A.76C.html
這好像跟我的理解有所不同,如果是浮點數的話,會取到小數點後的最大有效值
,比如說:
1.903900 -> 1.9049
2.410000 -> 2.41
3.541130 -> 3.54113
如果是整數的話,出來應該依然還是整數而不會被轉換。另一個可能的狀況是由
於有 NaN 的存在所進行的型態轉換:
https://bit.ly/2Qev3Iy
> In the absence of high performance NA support being built into NumPy
> from the ground up, the primary casualty is the ability to represen
> NAs in integer arrays.
>
> This trade-off is made largely for memory and performance reasons,
> and also so that the resulting Series continues to be “numeric”.
>
> If you need to represent integers with possibly missing values, use
> one of the nullable-integer extension dtypes provided by pandas:
>
> Int8Dtype, Int16Dtype, Int32Dtype, Int64Dtype
轉字串應該會比較快一點...
試算表工具可以拿來開啟 csv 檔案,但 csv 檔案並不具備試算表的詳細格式,
這是很多人常常會搞不清楚的,要用試算表開啟 csv 檔案,建議使用匯入的方
式而非直接開啟,除此之外建議保存時另存新檔。
甚至我之前也有遇過 Excel 匯入 csv 之後,他的 parser 抓錯沒有成功匯入的
狀況。
※ 編輯: Hsins (140.112.247.1 臺灣), 12/25/2019 18:26:21
... <看更多>