Как записать значения словаря в массиве numpy в файл csv вместо полного словаря? - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь записать многомерный массив numpy в файл .csv.Этот массив включает в себя слова, цифры и словарь.При записи файла мой код выводит ключи и значения в массив.Тем не менее, мне нужно только записать значения.

Мой код можно увидеть следующим образом:

import numpy as np

lowercase_letters = 'abcdefghijklmnopqrstuvwxyz'

words_array = np.genfromtxt('words_file.txt', dtype=str).reshape(300, 1)

lowercase_words = np.array([word[0].lower() for word in words_array])
words_array = np.append(words_array, lowercase_words.reshape(300, 1), axis=1)

def letter_frequency(word):
  letter_frequency = {}
for letter in lowercase_letters:
  letter_frequency[letter] = 0
for letter in word:
  letter_frequency[letter] += 1
return letter_frequency

vectorized_frequencies = np.vectorize(letter_frequency)
frequencies = vectorized_frequencies(lowercase_words)
words_array = np.append(words_array, frequencies.reshape(300, 1), axis=1)

word_length = np.vectorize(len)
word_lengths = word_length(words_array[:, :1])
words_array = np.append(words_array, word_lengths.reshape(300, 1), axis=1)

np.savetxt('rocko_bishop_project2.csv', words_array, delimiter=',', fmt='%s',
       header="original, lower, a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,length")

После записи окончательного массива в файл CSV (также требуется, я могу 'не экспортируется как файл другого типа), он печатает полный словарь с ключами и значениями:

Abject,abject,{'a': 1, 'b': 1, 'c': 1, 'd': 0, 'e': 1, 'f': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 1, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 'o': 0, 'p': 0, 'q': 0, 'r': 0, 's': 0, 't': 1, 'u': 0, 'v': 0, 'w': 0, 'x': 0, 'y': 0, 'z': 0},6

Однако я хотел бы просто напечатать значения вместо этого.

Abject,abject,1,1,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0

Параметры проекта не позволяют мне импортировать pandas или любую другую библиотеку, кроме numpy.

Каков наилучший курс действий?

1 Ответ

0 голосов
/ 21 февраля 2019

Предположим, из-за отсутствия дополнительной информации, что ваш array действительно list подобен:

In [338]: alist = ['Abjure','abjure',{'a': 1, 'b': 1, 'c': 0, 'd': 0, 'e': 1, 'f
     ...: ': 0, 'g': 0, 'h': 0, 'i': 0, 'j': 1, 'k': 0, 'l': 0, 'm': 0, 'n': 0, 
     ...: 'o': 0, 'p': 0, 'q': 0, 'r': 1, 's': 0, 't': 0, 'u': 1, 'v': 0, 'w': 0
     ...: , 'x': 0, 'y': 0, 'z': 0}]   

Если это не список, это должен быть массив dtype объекта, вв этом случае arr.tolist() должен создать тот же список.

В качестве первой попытки просто напечатайте (с возможным перенаправлением в файл) элементы:

In [341]: print(alist[:2], list(alist[2].values()))                             
['Abjure', 'abjure'] [1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]

Здесь я использую values() дляполучить значения словаря.

Теперь мы можем очистить печать (или запись в файл).Это простой Python.Нет необходимости вызывать numpy или любой другой пакет.

Расширение подсписков:

In [343]: print(*alist[:2], *list(alist[2].values()))                           
Abjure abjure 1 1 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...