2016-09-27 25 views
2

當我讀,看起來像這樣一個CSV文件:如何在有「」行時分隔CSV文件?

To, ,New York ,Norfolk ,Charleston ,Savannah 

Le Havre (Fri), ,15 ,18 ,22 ,24 

Rotterdam (Sun) ,"",13 ,16 ,20 ,22 

Hamburg (Thu) ,"",11 ,14 ,18 ,20 

Southampton (Fri) , "" ,8 ,11 ,15 ,17 

使用熊貓,如下:

duration_route1 = pd.read_csv(file_name, sep = ',') 

我得到以下結果(我用崇高的文本來運行我的Python代碼):

enter image description here

你看,當有一個"",它不字符串分隔。爲什麼不這樣做?

+1

能否以文本形式而不是Excel顯示CSV *實際*的樣子?你有沒有試過明確設置一個引號字符? – jonrsharpe

+0

對我來說,它的作品非常好。 – jezrael

+0

你可以上傳你的示例文件到Dropbox或gdocs進行測試嗎? – jezrael

回答

3

你需要quoting=csv.QUOTE_NONE因爲有quotingfile

df = pd.read_csv('TAT_AX1_westbound_style3.csv', quoting=csv.QUOTE_NONE) 
print (df) 
        To   New York Norfolk Charleston Savannah 
0  Le Havre (Fri)     15  18   22  24 
1 "Rotterdam (Sun)  """"   13  16   20  22 " 
2  "Hamburg (Thu)  """"   11  14   18  20 " 
3 "Southampton (Fri) """"   8  11   15  17 " 
#remove first column 
df = df.drop(df.columns[0], axis=1) 
#remove all " values to empty string, convert to int 
df = df.replace({'"':''}, regex=True).astype(int) 
print (df) 
        New York Norfolk Charleston Savannah 
To                
Le Havre (Fri)    15  18   22   24 
"Rotterdam (Sun)   13  16   20   22 
"Hamburg (Thu)    11  14   18   20 
"Southampton (Fri)   8  11   15   17  15  17 
+0

中添加文件(以文本形式)。非常感謝你的幫助! – Koen

0

只需在python中使用csv庫, 將其導入並使用。

import csv 

file_obj = #your_file_object_read_mode 
rows = file_obj.readlines() 

for raw in csv.DictReader(rows, delimiter=","): 
    print(raw) # the raw will be a dictionary and you can use it well for any need. 

每個原始的樣子即

{'number3': '88', 'number2': '22', 'name': 'vipul', 'number1': '23'} 

這可以解決你的問題,我認爲,只要給它一試。

0

從您的樣品已提供,很顯然,這個問題是與數據集和大熊貓是否正常工作。

只有第一行被正確分隔,第二行全部在一列;作爲單個字符串(請注意")。如果我更換,|,你的問題就變得更清楚一點:

To          | |New York |Norfolk |Charleston |Savannah 
Le Havre (Fri)       | |15  |18  |22   |24 
"Rotterdam (Sun) ,"""",13 ,16 ,20 ,22 " | 
"Hamburg (Thu) ,"""",11 ,14 ,18 ,20 "  | 
"Southampton (Fri) , """" ,8 ,11 ,15 ,17 "| 

現在你必須以創建正確的數據集手動分割第二排。

>>> with open('sample2.txt') as f: 
... headers = next(f).split(',') 
... rows = [i.split(',') for i in f] 
... 
>>> rows = [list(map(str.strip, list(map(lambda x: x.replace('"', ''), i)))) for i in rows] 
>>> pd.DataFrame(rows, columns=headers) 
        To New York Norfolk Charleston Savannah 
0  Le Havre (Fri)   15  18   22  24 
1 Rotterdam (Sun)   13  16   20  22 
2  Hamburg (Thu)   11  14   18  20 
3 Southampton (Fri)   8  11   15  17 
+0

對我來說它不起作用 – jezrael

+0

對我來說,它不工作 – Koen