熊猫在没有标题的表格中读取

Posted

技术标签:

【中文标题】熊猫在没有标题的表格中读取【英文标题】:Pandas read in table without headers 【发布时间】:2015-05-30 23:40:50 【问题描述】:

如何使用 pandas 读取 .csv 文件(没有标题)以及当我只想要列的子集(比如总共 20 列中的第 4 和第 7 列)时?我似乎无法做到usecols

【问题讨论】:

【参考方案1】:

根据文档 https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html : headerint,int 列表,默认“推断” 用作列名的行号和数据的开头。默认行为是推断列名:如果未传递名称,则行为与 header=0 相同,并且从文件的第一行推断列名,如果显式传递列名,则行为与 header=None 相同.显式传递 header=0 以便能够替换现有名称。标题可以是一个整数列表,指定列上多索引的行位置,例如[0,1,3]。未指定的中间行将被跳过(例如,此示例中的 2 被跳过)。请注意,如果skip_blank_lines=True,此参数会忽略注释行和空行,因此header=0 表示数据的第一行而不是文件的第一行。

namesarray-like, 可选 要使用的列名列表。如果文件包含标题行,则应显式传递 header=0 以覆盖列名。不允许在此列表中重复。

columts = ['Day', 'PLMN', 'RNCname']
tempo = pd.read_csv("info.csv", sep=';', header=0, names=columts, index_col=False)

【讨论】:

【参考方案2】:

为了读取没有标题的 csv 并且仅对于某些列,您需要为第 4 列和第 7 列传递参数 header=Noneusecols=[3,6]

df = pd.read_csv(file_path, header=None, usecols=[3,6])

见docs

【讨论】:

发现您的解决方案很有用。这对我来说是新的 ==> usecols=[3,6]。【参考方案3】:

以前的答案很好而且正确,但在我看来,额外的names 参数会使其完美,应该是推荐的方式,尤其是当csv 没有headers 时。

解决方案

使用usecolsnames参数

df = pd.read_csv(file_path, usecols=[3,6], names=['colA', 'colB'])

补充阅读

或使用header=None 明确告诉人们csv 没有标题(无论如何这两行都是相同

df = pd.read_csv(file_path, usecols=[3,6], names=['colA', 'colB'], header=None)

以便您可以通过

检索您的数据
# with `names` parameter
df['colA']
df['colB'] 

而不是

# without `names` parameter
df[0]
df[1]

解释

基于read_csv,当names被显式传递时,header将表现得像None而不是0,所以当names存在时可以跳过header=None

【讨论】:

我真的不明白为什么它在文档中解释得如此不清楚。他们在那里只提到了一次header=None,它是:“那么行为与header=None相同”。但这是什么行为?只是没有提到。我是否应该完全避免使用header=None 而使用names 来处理它? 这应该是公认的答案,names 示例非常需要。这个答案应该被投票。【参考方案4】:

确保为第 4 列和第 7 列指定传递 header=None 并添加 usecols=[3,6]

【讨论】:

以上是关于熊猫在没有标题的表格中读取的主要内容,如果未能解决你的问题,请参考以下文章

在熊猫中将文本读入表格格式

如何将非结构化的 excel 电子表格加载到熊猫中?

在熊猫中按名称将列移动到表格的前面

熊猫和电子表格

Discord Bot 读取 Google 表格并在表格中返回值。我想在没有表格格式的消息中返回值 ar CSV

熊猫日期时间格式 VS 谷歌表格日期格式