python 如何向PandasDataFrame添加标题行

qnzebej0  于 2023-01-24  发布在  Python
关注(0)|答案(7)|浏览(514)

我正在将一个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添加一个标题行?

jv4diomz

jv4diomz1#

您可以直接在read_csv中使用names
names:类似于数组,默认为None要使用的列名列表。如果文件不包含标题行,则应显式传递header=None

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

7d7tgy0s2#

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

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

pepwfjgg3#

col_Names=["Sequence", "Start", "End", "Coverage"]
my_CSV_File= pd.read_csv("yourCSVFile.csv",names=col_Names)

完成此操作后,只需检查:

my_CSV_File.head()
olqngx59

olqngx594#

简单易行的解决方案:

import pandas as pd

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

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

63lcw9qa

63lcw9qa5#

要修复代码,只需将[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一起使用。

c0vxltue

c0vxltue6#

由于提到我们是从csv阅读,因此分隔符应为','[as default, not need to mention]' and the given file has no header so header=None '

样品代码:

import pandas as pd
data = pd.read_csv('path/to/file.txt',header=None)
data.columns = ["Sequence", "Start", "End", "Coverage"]
print(data.head()) #Print the first rows
zz2j4svz

zz2j4svz7#

当阅读一个没有头的文件时,现有的答案正确地指出header=参数应该设置为None,但是没有解释为什么。这是因为默认情况下,header=0,这意味着文件的第一行被推断为头。例如,下面的代码用col_names覆盖第一行,因为第一行是作为标题读取的,它被col_names替换。
注意,这里假设列之间用空格' '分隔。

col_names = ["Sequence", "Start", "End", "Coverage"]
df = pd.read_csv("path/to/file.txt", sep=' ')                   # <--- wrong
df.columns = col_names

要获得正确的输出,您需要设置header=None

df = pd.read_csv("path/to/file.txt", sep=' ', header=None)      # <--- OK
df.columns = col_names

或使用names=参数在一次函数调用中分配列名:

df = pd.read_csv("path/to/file.txt", sep=' ', names=col_names)  # <--- OK

如果列数未知(因为len(col_names)必须等于从文件推断出的列数)或特定列名不重要,则通常首选header=None方式。例如,在read_csv之后调用add_prefix()可以向默认列名添加前缀:

df = pd.read_csv("path/to/file.txt", sep=' ', header=None).add_prefix('col')

相关问题