我有一个csv文件,我试图读入python,然后我想将前两列存储在一个名为name和gender的变量中。我正在使用的当前代码如下:
import csv
infile = open('blue.csv', 'r')
csvfile = csv.reader(infile)
name = []
gender = []
for row in csvfile:
name.append(row[0])
gender.append(row[1])
我遇到两个问题:
1)csv文件有标题,所以当我存储列时,我不想要包含在变量中的那些
2)我错过了csv文件最后一行的性别,所以当我将它存储在变量中时,我不想包含csv文件的最后一行。
我是R
程序员,所以对我来说,解决这个问题的方法是读取不包括第一行和最后一行的文件,但我不确定如何在python中执行此操作,或者更好的是,如果有更好/更聪明的选择。
如果有帮助,这就是模拟数据集的样子:
Name, Gender
Bob, Male
Susan, Female
Doug,
答案 0 :(得分:4)
你写了
我是一名R程序员,所以对我来说,解决这个问题的方法是读取不包括第一行和最后一行的文件,但我不确定如何在python中执行此操作
这可以通过readlines
和list slicing完成,如下所示:
open('foo.csv').readlines()[1: -1]
此外,请注意csv.reader
同时接受文件对象和列表:
csvfile可以是任何支持迭代器协议的对象,每次调用next()方法时都返回一个字符串 - 文件对象和列表对象都是合适的。
所以你可以使用:
for l in csv.reader(open('foo.csv').readlines()[1: -1]):
...
答案 1 :(得分:1)
由于您是R程序员,我建议您尝试pandas。
1)csv文件有标题,所以我不希望在存储列时包含在变量中的那些
您可以阅读csv read_csv(),无需任何设置即可处理标题。
2)我错过了csv文件最后一行的性别,所以当我将它存储在变量中时,我不想包含csv文件的最后一行。
我认为您的要求是跳过缺少数据的行,您可以使用dropna()
所以,编码部分:
In [1]: import pandas as pd
In [2]: !cat sample_data.csv
Name, Gender
Bob, Male
Susan, Female
Doug,
In [3]: pd.read_csv("./sample_data.csv").dropna()
Out[3]:
Name Gender
0 Bob Male
1 Susan Female
答案 2 :(得分:0)
您可以将切片与try except循环结合使用,如下所示:
function bagger293(bigArray, results) {
// If results is passed, it will stay with that data. If it is not passed, it will be a new array.
results = results || [];
for (var item in bigArray){
if (typeof bigArray[item] === 'object'){
bagger293(bigArray[item], results);
}else{
results.push(bigArray[item]);
}
}
return results;
}
此代码会跳过任何没有性别的行,而不仅仅是最后一行。
答案 3 :(得分:0)
import csv
with open('data.csv', 'r') as f1:
numberOflines = len([line for line in f1]) -2
f1.seek(0)
r = csv.reader(f1)
next(r, None) # skip first line
for row in r:
if numberOflines > 0:
print(row[0])
numberOflines -=1