繁体   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