当我在一个看起来像这样的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代码):
您看到有""
时,它不会分隔字符串。为什么不这样做?
答案 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