как построить данные питона из файла были первый столбец строка и второй столбец является числом?

голоса
0

Предположим, у меня есть файл с именем ФАРМ со следующими данными

pigs 23
horses 10
cows 35
goats 20
sheep 22
chickens 62
roosters 5

Я хотел бы построить эти данные со следующим результатом

введите

Следующий код делает именно то, что я хочу

import matplotlib.pyplot as plt
import numpy as np
a,b = np.genfromtxt('FARM', usecols=(0,1), unpack=True, delimiter=' ', dtype='str')

x=[]
for i in a:
   x.append(i)

y=[]
for i in b:
   y.append(int(i))

plt.plot(x,y,'s')
plt.show()

Мой вопрос: есть ли прямой способ получить й и у от np.genfromtxt, или мне придется конвертировать из и б как я сделал?

Если бы можно было установить DTYPE выборочно для каждого столбца, я бы то, что я хочу. Но я не мог понять, как это сделать.

После дальнейших размышлений, принимая во внимание комментарии и ответы, я думаю, более интуитивный способ построения колонн с различными типами данных из одного файла, чтобы сделать два вызова np.genfromtxt, каждый извлекая одну колонку, а затем идет в обычном порядке , следующее:

x = np.genfromtxt('FARM', usecols=(0),  unpack=True,  dtype='str')                 
y = np.genfromtxt('FARM', usecols=(1),  unpack=True,  dtype='int')        

plt.plot(x,y,'s')
plt.show()

Таким образом, не требуется никакой специальные преобразования не требуется.

Задан 20/10/2018 в 05:31
источник пользователем
На других языках...                            


1 ответов

голоса
0

Существует прямой путь , чтобы получить отдельные типы данных непосредственно из файла. Чтобы сделать это, вы должны использовать dtype=None. Это, dtypes по умолчанию будет сохранен. Список кортежей будет сгенерирован , которые можно разделить на две подсписков xи с yпомощью , zipа затем непосредственно сюжет.

data = np.genfromtxt('FARM', usecols=(0,1), delimiter=' ', dtype=None)
x, y = list(zip(*data))
plt.plot(x,y,'s')

введите описание изображения здесь

Альтернатива вашего подхода будет непосредственно использовать mapдля преобразования строк intвместо того , чтобы использовать для цикла.

a,b = np.genfromtxt('FARM', usecols=(0,1), unpack=True, delimiter=' ', dtype='str')

y = list(map(int, b))
plt.plot(a,y,'s')
Ответил 20/10/2018 в 10:17
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more