如果有“”行,如何分隔CSV文件?

时间:2016-09-27 11:51:02

标签: python csv pandas

当我在一个看起来像这样的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

使用pandas,如下:

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

我得到以下结果(我使用Sublime Text来运行我的Python代码):

enter image description here

您看到有""时,它不会分隔字符串。为什么不这样做?

3 个答案:

答案 0 :(得分:3)

您需要quoting=csv.QUOTE_NONE,因为quoting中有file

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

答案 1 :(得分: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'}

这解决了我的问题,我想,试一试。

答案 2 :(得分:0)

从您提供的示例中,很明显问题出在数据集上,并且pandas工作正常。

只有第一行正确分开,第二行全部在一列中;作为单个字符串(注意")。如果我将,替换为|,您的问题就会变得更加清晰:

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