[英]Why pandas dataframe displaying column names as 'unnamed: 1', unnamed: 2',.......'unnamed: n'
問題:我得到了一個來自第三方的csv
文件(帶有分隔符~
),大約有 4000 條記錄,並且有 150 列具有真實列名,例如FirstName~LastName~OrderID~City~.....
但是當文件被加載到pandas dataframe df
並且當我使用print(list(df.columns))
時,它顯示列名如下(為簡潔起見,我對其進行了簡化):
['ÿþA', 'Unnamed: 1', 'Unnamed: 2', 'Unnamed: 3', 'Unnamed: 4',,,,,'Unnamed: 49']
問題:我可能做錯了什么,我們如何解決這個問題以簡單地在 df 中顯示真實的列名? 我正在使用最新版本的python
。 我看到了一些相關的文章,例如這篇文章,但它們都與一個專欄有關。
備注:這是一個UTF-16 LE BOM
文件。 我在我的代碼中發現了這個問題,我引用了一個列作為df['OrdeID']
並且我很清楚KeyError這意味着您正在引用一個不存在的列。
代碼:
import pandas as pd
df = pd.read_csv('/dbfs/FileStore/tables/MyDataFile.txt', sep='~', low_memory=False, quotechar='"', header='infer', encoding='cp1252')
print(df['OrdId'])
MyDataFile.txt 示例:
FirstName~LastName~OrderID~City~.....
Kim~Doe~1234~New York~...............
Bob~Mason~456~Seattle~...............
..................
你確定你有正確的編碼嗎?
當以 cp1252 編碼讀取時,我看到您的數據文件以ÿþ
開頭。 這看起來像一個 UTF16 字節順序標記 (BOM。) Wikipedia 有一張這些 的表,如果您查看該表,您會發現它與 UTF16-LE(小端序)匹配。
一旦你找出正確的編碼,你可以通過調用pd.read_csv(..., encoding='...')
告訴 Pandas 使用什么編碼。 要弄清楚在編碼字段中放置什么,您可以查閱此表。 如果你想要 UTF16-LE,那就是'utf_16_le'
。
更多信息:
這是什么“ÿþA”? 這是同一個問題,但是關於 R 而不是 Python。
嘿,您不能直接使用它,並且想根據我的理解通過重命名它來使用另一種方法,它不存在
嘗試使用
df.rename(columns={'Unnamed: 0':'new name0','Unnamed: 1':'new name1'}, inplace=True)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.