2015-10-20 746 views
0

我有一個csv文件,我正在嘗試讀入python,然後我想將前兩列存儲在名爲和名稱的變量中。我使用的當前代碼如下:在python中讀取.csv的特定行數

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

您可以添加您的CSV的樣本? – Onilol

+0

我做過了,它在模擬數據集上面。 – user6291

+0

模擬數據集不是我的Python代碼。 – user6291

回答

2

你寫

我的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]): 
    ... 
0

您可以結合使用切片與除環路嘗試像這樣:

for row in csvfile[1:]: 
    try: 
     gender.append(row[1]) 
     name.append(row[0]) 
    except: 
     continue 

此代碼跳過任何沒有性別的行,不只是最後一行。

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 
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