我有一個匯出的 Excel CSV 檔案,其中str(date), str, float, float, float, float, int包含列值。一些 Excel 單元格是空的,因此keep_default_na需要使用。有些是雙引號,存在千位分隔符。引數的數量似乎使 pandas 決議器感到困惑,因為運行此輸出:
ValueError:無法將字串轉換為浮點數:'1,917.6'
似乎當keep_default_na存在時,thousands會被忽略。當我在 csv 中沒有任何,,,,,,行的情況下運行它時,它可以完美運行。
CSV 檔案:
TS
Date,Symbol,Open,High,Low,Close,Volume
6/14/2022 23:59,A,918.1,918.1,918.1,918.1,1
,,,,,,
6/14/2022 23:57,A,"1,917.6",917.6,917.6,917.6,1
,,,,,,
,,,,,,
代碼
df = pd.read_csv('test.csv',
skiprows=1,
quotechar='"',
thousands=',',
keep_default_na=False,
dtype = {'Open': np.float64, 'High': np.float64,
'Low': np.float64, 'Close': np.float64,
'Volume': np.uint32, 'Symbol': 'string'})
uj5u.com熱心網友回復:
我認為問題可能在于報告哪些值是問題的例程并不像完整決議引擎那樣復雜 - 我認為您在每列中都有多個 dtype 問題,并且 pandas 告訴您錯誤的值是實際問題。float 列不能有值“”(因此它需要包含在 na_values 串列中),而 int 列不能有 NA 值,因此您需要跳過頁腳,或者提供na_values并使用 float dtypes。以下兩項都對我有用:
skipfooter 使用您的引數,但回退到 python 引擎:
In [26]: df = pd.read_csv('test.csv',
...: skiprows=1,
...: quotechar='"',
...: thousands=",",
...: keep_default_na=False,
...: dtype = {'Open': np.float64, 'High': np.float64,
...: 'Low': np.float64, 'Close': np.float64,
...: 'Volume': np.uint32, 'Symbol': 'string'},
...: skipfooter=2,
...: )
或者,您可以使用浮點列讀取并將 [""] 指定為 na_value:
In [29]: df = pd.read_csv('test.csv',
...: skiprows=1,
...: quotechar='"',
...: thousands=",",
...: keep_default_na=False,
...: dtype = {'Open': np.float64, 'High': np.float64,
...: 'Low': np.float64, 'Close': np.float64,
...: 'Volume': np.float32, 'Symbol': 'string'},
...: na_values=[""],
...: )
此時,您可以根據您喜歡的任何條件洗掉行,例如,洗掉帶有 NaN 的行'Volume',然后轉換為 int:
In [30]: df = df[df.Volume.notnull()]
In [31]: df["Volume"] = df["Volume"].astype(int)
或者,您可以設定一個無效的值標記,例如:
In [32]: df["Volume"] = df["Volume"].fillna(-9999).astype(int)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492547.html
上一篇:Hawkeye部署
