Py学习  »  Python

python csv文件读取:将第一行转换为列标题,next(reader)返回不需要的字符

D. Joe • 4 年前 • 907 次点击  

目前,我正在编写一些代码,以便在csv文件中使用pandas读取,我需要将文件的第一行读取到一个列表中,以便用于一些描述(请参见代码部分1)。我可以用 熊猫.read_csv 参数 header=0 ,它自动读取列标题,但不返回列表afaik。在评论中 print() ,names是我用来手动将列标题传递到的列表 熊猫.read_csv 但我希望它是自动的(所以当我添加/删除列时,我不必手动编辑名称数组)。

所以,为了解决这个问题,我想出了一个主意,就是使用csv.reader单独读取第一行,并得到一个列名列表,我可以用这种方式在pandas.read_csv中使用(参见代码第2部分)。

第1部分熊猫csv数据的读取和打印描述

import pandas as pd
filename = 'test.csv'
dataheadsize = 10
data = pd.read_csv(filename, sep=";", header=0, decimal=",") 

用于在此处传递名称列表,而不是头=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',
)

第2部分试图将csv的第一行读取到列表中

import csv
file = open(filename, 'r')
reader = csv.reader(file, delimiter=';')
names = next(reader)
print(names)

这给了我需要的列表,但由于某些原因,它在索引[0]处读取了一些额外的不需要的字符。这是由 打印() :

['VAR00001', 'VAR00002', 'VAR00003']

如你所见,我不想要那些  '要返回的字符,我想知道最好的方法是什么来避免这种情况,我希望它尽可能自动地供将来使用,这就是为什么我不想通过切片来删除字符,因为我不知道这些字符是否根据csv文件而改变,它们的数量是否改变,等等。

作为参考,这是.csv文件的前5行:

VAR00001;VAR00002;VAR00003
1;2;4
1;2;4
0;5;4
0;1;4

正如你现在可能知道的,我不是最有经验的编码员,所以如果有一种方法可以跳过整个“在csv中单独阅读只是为了将列名放入列表”的部分,请务必让我知道,因为我搞不懂!

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/50872
 
907 次点击  
文章 [ 4 ]  |  最新文章 4 年前