1

我試圖設置一個Python腳本,它能夠讀取許多固定寬度的數據文件,然後將它們轉換爲csv。要做到這一點,我使用pandas這樣的:Python使用Pandas讀取固定寬度的文件時沒有任何數據類型解釋

pandas.read_fwf('source.txt', colspecs=column_position_length).\ 
     to_csv('output.csv', header=column_name, index=False, encoding='utf-8') 

column_position_lengthcolumn_name是包含讀取和寫入數據所需的信息列表。

在這些文件中,我有很長的代表測試答案的數字字符串。例如:333133322122222223133313222222221222111133313333代表多項選擇測試的正確答案。所以這是一個比數值更多的代碼。我遇到的問題是大熊貓將這些值解釋爲浮點數,然後用科學記數法將這些值寫入csv(3.331333221222221e + 47)。

我發現了很多關於這個問題的問題,但他們沒有完全解決我的問題。

  1. Solution 1 - 我相信在這一點上的價值已經轉換爲浮動,所以這沒有幫助。
  2. Solution 2 - 根據大熊貓documentationdtype不支持在Python中作爲read_fwf的參數。
  3. 解決方案3使用轉換器 - 使用轉換器的問題是您需要指定要轉換爲數據類型的列名稱或索引,但是我想將所有列讀作字符串。

第二個選項看起來像是以字符串的形式讀取每一列的答案,但不幸的是它不支持read_fwf。有什麼建議麼?

+2

'dtype' _is_支持,是的,將其設置爲'object'將是最佳解決方案。 – DyZ

+0

dtype:列的類型名稱或字典 - >類型,默認無 數據或列的數據類型。例如。 {'a':np.float64,'b':np.int32}(不支持engine ='python')。使用str或對象來保存並不解釋dtype。 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_fwf.html – dselgo

回答

1

所以我想我想出了一個解決方案,但我不知道它爲什麼起作用。熊貓將這些值解釋爲浮點數,因爲列中有NaN值(空行)。通過將keep_default_na=False添加到read_fwf()參數中,它解決了此問題。按照documentation

keep_default_na:BOOL,默認值是true如果指定na_values和 keep_default_na是假的默認NaN值將被覆蓋,否則 他們追加到。

我想我不太清楚這是如何解決我的問題。任何人都可以添加任何清晰的這個?

相關問題