【发布时间】:2019-01-22 08:58:46
【问题描述】:
目前我正在编写一些代码以使用 pandas 读取 csv 文件,并且我需要将文件的第一行读入列表中以便将其用于某些描述性(参见代码第 1 部分)。我可以使用 pandas.read_csv 参数header=0,它会自动读出列标题,但它不会返回列表 afaik。在print() 的评论中,names 是我用来手动将列标题传递给 pandas.read_csv 的列表,但我希望它是自动的(所以当我添加/删除列时,我不必手动编辑名称数组)。
因此,为了解决这个问题,我想出了一个想法,即使用 csv.reader 单独读取第一行并获得一个列名列表,我可以通过这种方式在 pandas.read_csv 中使用(参见代码第 2 部分) .
Part1 pandas csv读取和打印数据的描述
import pandas as pd
filename = 'test.csv'
dataheadsize = 10
data = pd.read_csv(filename, sep=";", header=0, decimal=",")
用于在此处传递名称列表而不是 header=0
print('Descriptives:\n', data.describe(), '\n\n',
'Datasheet (', dataheadsize, 'rows shown):\n', data.head(dataheadsize),
#'Count per class:\n',data.groupby(names[0]).size(),'\n\n',
)
Part2 试图将 csv 的第一行读入列表
import csv
file = open(filename, 'r')
reader = csv.reader(file, delimiter=';')
names = next(reader)
print(names)
这为我提供了我需要的列表,但由于某种原因,它在索引 [0] 处读取了一些额外的不需要的字符。这是print()返回的内容:
['VAR00001', 'VAR00002', 'VAR00003']
如您所见,我不希望返回那些 '' 字符,我想知道最好的方法是什么来规避它,我希望它是尽可能自动以供将来使用,这就是为什么我不想通过切片来删除字符,因为我不知道这些字符是否会根据 csv 文件而变化,它们的数量是否会发生变化等。
作为参考,这是 .csv 文件的前 5 行:
VAR00001;VAR00002;VAR00003
1;2;4
1;2;4
0;5;4
0;1;4
您现在可能已经知道,我不是最有经验的编码员,所以如果有办法跳过整个“单独读取 csv 以将列名放入列表”部分,请务必让我知道,因为我想不通!
【问题讨论】:
-
好像是编码错误,你能用
file = open(filename, 'r', encoding='utf-8')试试吗? -
我怀疑文件是以不同的格式编码的。尝试添加编码格式,例如 latin 将 encoding ='latin1'。