更新:最初發布問題時,我沒有意識到.在某些條目中用作數字分組符號。但是,此資訊對問題至關重要。這是原始問題:
我目前正在嘗試在 pandas 中匯入格式不太完美的 csv 檔案,因為包括數字在內的所有值都被參考。格式如下所示:
Date;Type;Amount;Currency;Category;Person;Account;Counter Account;Group;Note
"19.02.17";"Expenses";"-36,37";"EUR";"Groceries";"";"Bank account";"";"";""
現在,我嘗試使用以下命令匯入它:
import pandas
dtypes = {"Type":"string", "Amount": "float"}
table = pandas.read_csv("data.csv", delimiter = ";", decimal = ",", parse_dates = ["Date"], dtype = dtypes, quoting = 3)
所以我基本上一直在試圖告訴 pandas 小數分隔符是逗號,欄位分隔符是分號,并且“金額”列應該被決議為浮點數。但是,嘗試決議檔案時,我仍然收到錯誤訊息:
ValueError: could not convert string to float: '689,15'"
我認為引號和逗號小數分隔符的組合對于熊貓來說太過分了,盡管我認為我在技術上已經為它提供了它需要的所有資訊。
該檔案是從第三方程式匯出的,所以很遺憾我對格式沒有影響。有誰知道如何讓熊貓吞下這個?
額外的問題:如果我在沒有提供明確資料型別的情況下閱讀此檔案,我不會像預期的那樣得到任何型別為“string”的列,而是使用“object”。這是為什么?
uj5u.com熱心網友回復:
那個怎么樣 ?
import pandas
table = pandas.read_csv("data.csv", sep=";", decimal=",")
print(table["Amount"][0]) # -36.37
print(type(table["Amount"][0])) # <class 'numpy.float64'>
print(table["Amount"][0] 36.37) # 0.0
Pandas 自動檢測數字并將其轉換為numpy.float64.
編輯:
正如@bweber 發現的,有些值data.csv包含超過3位數字,并使用了數字分組符號' .'。為了將字串轉換為整數,必須將使用的符號傳遞給read_csv()方法:
table = pandas.read_csv("data.csv", sep=";", decimal=",", thousands='.')
uj5u.com熱心網友回復:
更新:雖然這個答案仍然有效,但有一個更簡單的解決方案。我最初沒有意識到某些條目.用作數字分組符號,因此造成混淆。
好的,我找到了一種使用converters引數傳遞進行轉換的 lambda 的方法。到目前為止,我無法找到更簡單的解決方案。
toFloat = lambda x: float(x.replace(".", "").replace(",", "."))
table = pandas.read_csv("data.csv", delimiter = ";", decimal = ",", parse_dates = ["Date"], converters = {"Amount": toFloat})
lambdatoFloat接受一個字串,洗掉所有出現的.字符(用作數字分組符號),替換所有出現的,by .,然后將結果字串轉換為浮點數。然后將此 lambda 作為“金額”列的轉換器傳遞給read_csv函式。或許現在這個decimal論點也是可有可無的。
我將暫時保留這個問題,看看是否有人能想出一個更簡單的解決方案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/433948.html
上一篇:R讀取帶有=“”格式的csv
