【问题标题】:How to add header row to a pandas DataFrame如何将标题行添加到熊猫 DataFrame
【发布时间】:2016-03-09 14:16:21
【问题描述】:

我正在将一个 csv 文件读入pandas。此 csv 文件由四列和一些行组成,但没有我要添加的标题行。我一直在尝试以下方法:

Cov = pd.read_csv("path/to/file.txt", sep='\t')
Frame=pd.DataFrame([Cov], columns = ["Sequence", "Start", "End", "Coverage"])
Frame.to_csv("path/to/file.txt", sep='\t')

但是当我应用代码时,我得到以下错误:

ValueError: Shape of passed values is (1, 1), indices imply (4, 1)

这个错误到底是什么意思?在 python 中将标题行添加到我的 csv 文件/pandas df 的一种干净的方法是什么?

【问题讨论】:

  • 这是对您问题的不同解释:将另一个标头添加到现有 Dataframe 以创建 MultiIndex。

标签: python csv pandas header


【解决方案1】:

简单易行的解决方案:

import pandas as pd

df = pd.read_csv("path/to/file.txt", sep='\t')
headers =  ["Sequence", "Start", "End", "Coverage"]
df.columns = headers

注意:确保您的标头长度和 CSV 文件标头长度不匹配。

【讨论】:

    【解决方案2】:

    你可以直接在read_csv中使用names

    names : 类似数组,默认 None 要使用的列名列表。如果文件 不包含标题行,那么您应该显式传递 header=None

    Cov = pd.read_csv("path/to/file.txt", 
                      sep='\t', 
                      names=["Sequence", "Start", "End", "Coverage"])
    

    【讨论】:

    • 你会笑的。我实际上尝试过这个,但没有意识到你必须在名称周围加上方括号。回想起来,这在逻辑上是合乎逻辑的。谢谢!
    • 别担心,我们都犯过那些愚蠢的错误。我也为他们感到内疚。
    • @Leb,我遇到了完全相同的问题,我尝试了您的解决方案。我得到了表格的标题,但第一行也被相同的标题名称替换。我现在该怎么办?
    • 它为我的数据添加了更多的列,所有列都带有NaN 属性。这是因为我的分隔符是一个空格。
    • 如果你创建一个 DataFrame 属性被称为一个东西而你一个 csv 文件它被称为另一个东西,是否有原因。我相信这个标题标签属性有 3 个不同的名称,具体取决于您使用的功能。
    【解决方案3】:

    要修复您的代码,您只需将[Cov] 更改为Cov.valuespd.DataFrame 的第一个参数将变为多维numpy 数组:

    Cov = pd.read_csv("path/to/file.txt", sep='\t')
    Frame=pd.DataFrame(Cov.values, columns = ["Sequence", "Start", "End", "Coverage"])
    Frame.to_csv("path/to/file.txt", sep='\t')
    

    但最聪明的解决方案仍然是使用pd.read_excelheader=Nonenames=columns_list

    【讨论】:

    • 我们给columns_list的时候,可以给选中的columns添加默认值吗?
    【解决方案4】:
    col_Names=["Sequence", "Start", "End", "Coverage"]
    my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)
    

    完成此操作后,只需检查一下[很明显我知道,你知道。不过还是……

    my_CSV_File.head()
    

    希望对您有所帮助...干杯

    【讨论】:

    • 请使用{} 按钮格式化您的代码。缩进很重要。
    【解决方案5】:

    或者,您可以使用header=None 读取您的csv,然后使用df.columns 添加它:

    Cov = pd.read_csv("path/to/file.txt", sep='\t', header=None)
    Cov.columns = ["Sequence", "Start", "End", "Coverage"]
    

    【讨论】:

    • 这是非常有用且简单的方法。谢谢@AntonProtopopov
    • 代码很好 - 但我发现在空数据帧上它不起作用。在这种情况下,Python 会抛出“ValueError: Length mismatch: Expected axis has 0 elements, new values have ... elements”。你可能需要stackoverflow.com/questions/44513738/…
    猜你喜欢
    • 2019-04-27
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2021-04-25
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多