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