簡體   English   中英

為什么熊貓數據框將列名顯示為'未命名:1',未命名:2',.......'未命名:n'

[英]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'

更多信息:

read_csv 上的 Pandas 文檔

這是什么“ÿþA”? 這是同一個問題,但是關於 R 而不是 Python。

嘿,您不能直接使用它,並且想根據我的理解通過重命名它來使用另一種方法,它不存在

嘗試使用

df.rename(columns={'Unnamed: 0':'new name0','Unnamed: 1':'new name1'}, inplace=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM