При чтении данных из файла: вывод {'y': массив ([-0.21]), 'x': массив ([1.63])}

Я буду читать данные из файла, у меня есть только два числа в файле (1.63, -0.21), вывод:

{'y': array([-0.21]), 'x': array([1.63])}

Мне нужен такой вывод:

position = {'x':  1.63 , 'y' : -0.21}

это мой код:

import pandas as pd
import numpy as np
def read():

    data = pd.read_csv('distance.csv', skipinitialspace=True, header=None)

    x0, y0 = np.array(data.ix[:,0]), np.array(data.ix[:,1])

    position = {'x':  x0 , 'y' : y0}
    print position

if __name__ == '__main__':


    try:
        read()
    except KeyboardInterrupt:
        rospy.loginfo('Shutting down')

пожалуйста, помогите мне

заранее спасибо

Что именно содержит файл? Просто два числа или строка, подобная исходному словарю.

hpaulj 30.05.2019 18:40
1
1
44
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Изменить это x0, y0 = np.array(data.ix[:,0]), np.array(data.ix[:,1]) к x0, y0 = data.ix[:,0], data.ix[:,1]

По сути, вам нужно удалить обертку np.array, которая преобразует ваш float в nd.array

Спасибо за помощь, вывод: {'y': 0 -0.21 Name: 1, dtype: float64, 'x': 0 1.63 Name: 0, dtype: float64}, мне нужно вот так {'x': 1.63 , 'y' : -0.21}

Redhwan 30.05.2019 15:24

по этому пути работало но долго

import pandas as pd
import numpy as np
import csv
def read():
    data_path = 'distance.csv'
    with open(data_path, 'r') as f:
        reader = csv.reader(f, delimiter=',')

        # get all the rows as a list
        data = list(reader)
        # transform data into numpy array
        data = np.array(data).astype(float)


    a = data[0]
    x0,y0 = a[0], a[1]

#
    position = {'x':  x0 , 'y' : y0}
    print position

if __name__ == '__main__':


    try:
        read()
    except KeyboardInterrupt:
        rospy.loginfo('Shutting down')

выход:

{'y': -0.21, 'x': 1.63}

также этот способ хорош:

import pandas as pd
import numpy as np
def read():

    data = np.genfromtxt('distance.csv', dtype=str, delimiter=',')

    x0, y0 = (data[0]), (data[1])

    position = {'x':  x0 , 'y' : y0}
    print position

if __name__ == '__main__':


    try:
        read()
    except KeyboardInterrupt:
        rospy.loginfo('Shutting down')

выход:

{'y': '-0.21', 'x': '1.63'}

Если это всего лишь одна строка с двумя числами, зачем вы вообще используете np.array? В качестве альтернативы вы пробовали np.genfromtxt?

hpaulj 30.05.2019 18:41
Ответ принят как подходящий

попробуй это

import numpy as np

data = np.genfromtxt('distance.csv', dtype=list).tolist()
x0,y0 = float(data[0]), float(data[1])

position = {'x':  x0 , 'y' : y0}
print position

вывод:

{'y': -0.7, 'x': 1.7}

все они правы, это зависит от того, как записывать ваши данные. например, этот метод подходит для вас, потому что он иногда записывает его во втором ряду: with open("distance.csv", "wb") as text_file: text_file.write("\n%.3f" % (x)) text_file.write("\t%.3f" % (l))

Redhwan 22.11.2019 09:25

Другие вопросы по теме