Символ b добавляется к выводу массива numpy? - PullRequest
2 голосов
/ 23 марта 2019

Ниже мой код и работает нормально.единственная проблема состоит в том, что вывод на печать печатает символ b в начале каждого элемента.

понятия не имею, почему это происходит.

Может кто-нибудь, пожалуйста, помогите в этом.

   opening_duration_list = np.zeros(0, dtype={'names':('sitename', 'postcode', 'dur'),'formats':('S40', 'i4', 'f2')})
        with open(DATA_FILE) as f:
             rows = csv.DictReader(f)
             for row in rows:
             sitename = row['SITE NAME']
             postcode = row['POSTCODE']
             Open = row['Open']
             Close = row['Close']
             dur = compute_opening_duration(Open, Close)

    x = np.array([tuple((sitename+","+postcode+","+str(dur)).split(','))], dtype=opening_duration_list.dtype)
    #print(x['sitename'])
    opening_duration_list = np.append(opening_duration_list,x)

    if row is None:
        break

 for i in range(0,10):
             print("List No:",i+1,opening_duration_list[i])

Выход для этого кода:

  List No: 1 (b'Armadale (WA)', 6112, 8.)
  List No: 2 (b'Armidale (NSW)', 2350, 8.5)
  List No: 3 (b'Newport', 3015, 6.5)
  List No: 4 (b'Townsville Jobseekers', 4814, 7.5)
  List No: 5 (b'Albany', 6330, 6.5)
  List No: 6 (b'Atherton', 4883, 6.5)
  List No: 7 (b'Alice Springs', 870, 8.5)
  List No: 8 (b'Ayr', 4807, 6.5)
  List No: 9 (b'Ararat', 3377, 7.5)
  List No: 10 (b'Airport West', 3042, 6.5)

Я не знаю, как символ b добавляется спереди.

1 Ответ

0 голосов
/ 23 марта 2019

Я предполагаю, что ваш CSV выглядит примерно так (заменяя open и close на dur):

In [122]:  txt = """ 
     ...: SITE NAME, POSTCODE, dur 
     ...: Armadale (WA), 6112, 8. 
     ...: Armidale (NSW), 2350, 8.5 
     ...: Newport, 3015, 6.5 
     ...: Townsville Jobseekers, 4814, 7.5 
     ...: Albany, 6330, 6.5 
     ...:  """                                                                  

Я могу загрузить его с помощью `genfromtxt:

In [124]: data = np.genfromtxt(txt.splitlines(), delimiter=',', dtype=None, names=True, encoding=None)                                                   
In [125]: data                                                                  
Out[125]: 
array([('Armadale (WA)', 6112, 8. ), ('Armidale (NSW)', 2350, 8.5),
       ('Newport', 3015, 6.5), ('Townsville Jobseekers', 4814, 7.5),
       ('Albany', 6330, 6.5)],
      dtype=[('SITE_NAME', '<U21'), ('POSTCODE', '<i8'), ('dur', '<f8')])

и отобразитьэто как вы:

In [126]: for i in range(0,5): 
     ...:              print("List No:",i+1,data[i]) 
     ...:                                                                       
List No: 1 ('Armadale (WA)', 6112, 8.)
List No: 2 ('Armidale (NSW)', 2350, 8.5)
List No: 3 ('Newport', 3015, 6.5)
List No: 4 ('Townsville Jobseekers', 4814, 7.5)
List No: 5 ('Albany', 6330, 6.5)

Обратите внимание, что dtype для 1-го поля U21 - строка в кодировке Unicode.

С вашим dtype:

In [127]: data = np.genfromtxt(txt.splitlines(), delimiter=',', dtype={'names':(
     ...: 'sitename', 'postcode', 'dur'),'formats':('S40', 'i4', 'f2')}, skip_he
     ...: ader=1, encoding=None)                                                
In [128]: data                                                                  
Out[128]: 
array([(b'SITE NAME',   -1, nan), (b'Armadale (WA)', 6112, 8. ),
       (b'Armidale (NSW)', 2350, 8.5), (b'Newport', 3015, 6.5),
       (b'Townsville Jobseekers', 4814, 7.5), (b'Albany', 6330, 6.5)],
      dtype=[('sitename', 'S40'), ('postcode', '<i4'), ('dur', '<f2')])

У него есть флаг b bytestrings, потому что вы указали dtype 'S40.

===

С вашим читателем CSV, я думаю, что итерация будет лучше с накоплениемсписка кортежей:

   dt = {'names':('sitename', 'postcode', 'dur'),'formats':('U40', 'i4', 'f2')})
   alist = []
   with open(DATA_FILE) as f:
       rows = csv.DictReader(f)
       for row in rows:
           sitename = row['SITE NAME']
           postcode = row['POSTCODE']
           Open = row['Open']
           Close = row['Close']
           dur = compute_opening_duration(Open, Close)
           x = tuple((sitename + "," + postcode + "," + str(dur)).split(',')))
           alist.append(x)
           #print(x['sitename'])

   opening_duration_list = np.array(alist, dtype=dt)

np.append неудобно использовать вправо и медленно.И таким образом, вы должны использовать составной dtype только один раз.(Но поздравляю с тем, что np.append заработал; особенно с составным dtype.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...