2016-12-27 5 views
0

Ich bin beunruhigend, dass CSV-Datei lesen.So entfernen Sie zusätzliche Zitate aus CSV?

Ich versuchte die Ersetzungsmethode. Aber numpy unterstützt das nicht.

Das CSV-Dateiformat ist wie folgt.

"num","phone","sensorID","press","temp","accel","gps_lat","gps_lng","time" 
"1","null","A0:E6:F8:7B:16:EA","0","17","1.25","0","0","2016-12-14 13:34:59" 
"2","null","A0:E6:F8:7B:16:A9","0","18","1.19","0","0","2016-12-14 13:34:59" 
"3","null","A0:E6:F8:7B:15:A5","0","18","1.19","0","0","2016-12-14 13:34:59" 
"4","null","A0:E6:F8:7B:16:EA","0","17","1.25","0","0","2016-12-14 13:35:00" 
"5","null","A0:E6:F8:7B:16:A9","0","18","1.19","0","0","2016-12-14 13:35:00" 
"6","null","A0:E6:F8:7B:15:A5","0","19","1.38","0","0","2016-12-14 13:35:00" 
"7","null","A0:E6:F8:7B:16:D6","0","18","1.12","0","0","2016-12-14 13:35:01" 
"8","null","A0:E6:F8:7B:16:EA","0","17","1.31","0","0","2016-12-14 13:35:01" 
"9","null","A0:E6:F8:7B:15:A5","0","19","1.38","0","0","2016-12-14 13:35:01" 

Aber wenn ich diese Datei in numpy.loadtxt verwenden ist das Ergebnis genau wie diese

Quellcode

import numpy as np 
a= np.loadtxt('db_file.csv', delimiter=',', dtype='str', unpack=True) 
print a 

Ergebnis

[['"num"' '"1"' '"2"' ..., '"6979"' '"6980"' '"6981"'] 
['"phone"' '"null"' '"null"' ..., '" 821099631345"' '" 821099631345"' 
    '" 821099631345"'] 
['"sensorID"' '"A0:E6:F8:7B:16:EA"' '"A0:E6:F8:7B:16:A9"' ..., 
    '"A0:E6:F8:7B:16:EA"' '"A0:E6:F8:7B:16:A9"' '"A0:E6:F8:7B:16:D6"'] 
..., 
['"gps_lat"' '"0"' '"0"' ..., '37.596332"' '"37.596332"' '"37.596332"'] 
['"gps_lng"' '"0"' '"0"' ..., '"127.031773"' '"127.031773"' '"127.031773"'] 
['"time"' '"2016-12-14 13:34:59"' '"2016-12-14 13:34:59"' ..., 
    '"2016-12-15 00:03:11"' '"2016-12-15 00:03:11"' '"2016-12-15 00:03:12"']] 

Ich möchte die "entfernen dieses.

Also ich möchte wirklich diese Liste.

[['num', '1', '2' ..., '6979', '6980', '6981'] 
['phone', 'null', 'null' ..., '821099631345', ' 821099631345' 
    ' 821099631345'] 
['sensorID', 'A0:E6:F8:7B:16:EA', 'A0:E6:F8:7B:16:A9' ..., 
    'A0:E6:F8:7B:16:EA', 'A0:E6:F8:7B:16:A9', 'A0:E6:F8:7B:16:D6'] 
..., 
['gps_lat', '0', '0' ..., '37.596332' '37.596332' '37.596332'] 
['gps_lng' '0' '0' ..., '127.031773' '127.031773' '127.031773'] 
['time' '2016-12-14 13:34:59' '2016-12-14 13:34:59' ..., 
    '2016-12-15 00:03:11' '2016-12-15 00:03:11' '2016-12-15 00:03:12']] 

Welchen Code soll ich verwenden?

+0

Die Betreffzeile muss korrigiert werden. – hpaulj

+0

'pd.read_csv' scheint mit dieser Datei ohne Probleme umzugehen. Wir könnten 'genfromtxt' auch dazu bringen, zu arbeiten, aber wenn du' pandas' hast, wird das einfacher. – hpaulj

+0

Etwas Nützliches hier? http://stackoverflow.com/questions/2664790/reading-csv-files-in-numpy-where-delimiter- ist –

Antwort

1

Finden Sie einfach einen doppelten Anführungsstrich (") zu einem einzigen Anführungszeichen (') von Ihrem Excel-Editor. Da ich nicht weiß, welchen Editor Sie verwenden, so gebe ich Ihnen Schritt für Schritt Weg, jedes Zeichen zu ersetzen . Excel in MS

https://support.office.com/en-us/article/Find-or-replace-text-and-numbers-on-a-worksheet-3a2c910f-01b9-4263-8db2-333dead6ae33

+0

Ich glaube nicht, dass die Verwendung von "versus" zählt. Es ist das unnötige Zitaten, das die Last verkompliziert. – hpaulj

0

Mit Pandas erhalte ich:

In [1278]: pd.read_csv('stack41338622.txt') 
Out[1278]: 
    num phone   sensorID press temp accel gps_lat gps_lng \ 
0 1 null A0:E6:F8:7B:16:EA  0 17 1.25  0  0 
1 2 null A0:E6:F8:7B:16:A9  0 18 1.19  0  0 
2 3 null A0:E6:F8:7B:15:A5  0 18 1.19  0  0 
3 4 null A0:E6:F8:7B:16:EA  0 17 1.25  0  0 
4 5 null A0:E6:F8:7B:16:A9  0 18 1.19  0  0 
5 6 null A0:E6:F8:7B:15:A5  0 19 1.38  0  0 
6 7 null A0:E6:F8:7B:16:D6  0 18 1.12  0  0 
7 8 null A0:E6:F8:7B:16:EA  0 17 1.31  0  0 
8 9 null A0:E6:F8:7B:15:A5  0 19 1.38  0  0 

        time 
0 2016-12-14 13:34:59 
1 2016-12-14 13:34:59 
2 2016-12-14 13:34:59 
3 2016-12-14 13:35:00 
4 2016-12-14 13:35:00 
5 2016-12-14 13:35:00 
6 2016-12-14 13:35:01 
7 2016-12-14 13:35:01 
8 2016-12-14 13:35:01 

Mit converters wie in Reading CSV files in numpy where delimiter is "," beschrieben wir die zusätzlichen Anführungszeichen abstreifen kann leider.funktioniert nicht mehr mit Konvertern, also müssen wir das buchstabieren. Hier ist ein Anfang:

In [1327]: def foo(astr): 
     ...:  return astr[1:-1] 
In [1328]: convs = dict((col, foo) for col in range(9)) 
In [1329]: dt = ['i','S10','S20','i', 'i','f','i','i','S20'] 
In [1330]: data = np.genfromtxt('stack41338622.txt', dtype=dt, delimiter=',', names=True, converters=convs) 
In [1331]: data 
Out[1331]: 
array([ (1, b'null', b'A0:E6:F8:7B:16:EA', 0, 17, 1.25, 0, 0, b'2016-12-14 13:34:59'), 
     (2, b'null', b'A0:E6:F8:7B:16:A9', 0, 18, 1.190000057220459, 0, 0, b'2016-12-14 13:34:59'), 
     (3, b'null', b'A0:E6:F8:7B:15:A5', 0, 18, 1.190000057220459, 0, 0, b'2016-12-14 13:34:59'), 
     (4, b'null', b'A0:E6:F8:7B:16:EA', 0, 17, 1.25, 0, 0, b'2016-12-14 13:35:00'), 
     (5, b'null', b'A0:E6:F8:7B:16:A9', 0, 18, 1.190000057220459, 0, 0, b'2016-12-14 13:35:00'), 
     (6, b'null', b'A0:E6:F8:7B:15:A5', 0, 19, 1.3799999952316284, 0, 0, b'2016-12-14 13:35:00'), 
     (7, b'null', b'A0:E6:F8:7B:16:D6', 0, 18, 1.1200000047683716, 0, 0, b'2016-12-14 13:35:01'), 
     (8, b'null', b'A0:E6:F8:7B:16:EA', 0, 17, 1.309999942779541, 0, 0, b'2016-12-14 13:35:01'), 
     (9, b'null', b'A0:E6:F8:7B:15:A5', 0, 19, 1.3799999952316284, 0, 0, b'2016-12-14 13:35:01')], 
     dtype=[('num', '<i4'), ('phone', 'S10'), ('sensorID', 'S20'), ('press', '<i4'), ('temp', '<i4'), ('accel', '<f4'), ('gps_lat', '<i4'), ('gps_lng', '<i4'), ('time', 'S20')]) 

der Zeit Da ich dafür ausgegeben, ich bin geneigt, mit dem anderen Vorschlag zu gehen - Streifen aus den zusätzlichen Anführungszeichen in einem Texteditor. Diese Anführungszeichen werden nicht in einer kommagetrennten Datei benötigt und sind eher lästig als hilfreich.

In einem Editor entfernt ich nur die ":

num,phone,sensorID,press,temp,accel,gps_lat,gps_lng,time 
1,null,A0:E6:F8:7B:16:EA,0,17,1.25,0,0,2016-12-14 13:34:59 
2,null,A0:E6:F8:7B:16:A9,0,18,1.19,0,0,2016-12-14 13:34:59 
3,null,A0:E6:F8:7B:15:A5,0,18,1.19,0,0,2016-12-14 13:34:59 
4,null,A0:E6:F8:7B:16:EA,0,17,1.25,0,0,2016-12-14 13:35:00 
5,null,A0:E6:F8:7B:16:A9,0,18,1.19,0,0,2016-12-14 13:35:00 
... 

In [1336]: data = np.genfromtxt('stack41338622_1.txt', dtype=None, delimiter=',', names=True) 
In [1337]: data 
Out[1337]: 
array([ (1, b'null', b'A0:E6:F8:7B:16:EA', 0, 17, 1.25, 0, 0, b'2016-12-14 13:34:59'), 
     (2, b'null', b'A0:E6:F8:7B:16:A9', 0, 18, 1.19, 0, 0, b'2016-12-14 13:34:59'), 
     (3, b'null', b'A0:E6:F8:7B:15:A5', 0, 18, 1.19, 0, 0, b'2016-12-14 13:34:59'), 
     ..., 
     dtype=[('num', '<i4'), ('phone', 'S4'), ('sensorID', 'S17'), ('press', '<i4'), ('temp', '<i4'), ('accel', '<f8'), ('gps_lat', '<i4'), ('gps_lng', '<i4'), ('time', 'S19')]) 

Die b'' die Python3 Art und Weise zu zeigen, bytestrings sind. Sie werden diese in Py2 nicht sehen.

Verwandte Themen