Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 25, 2021 17:56:10

Irv1n
Зарегистрирован: 2018-09-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата по столбцам

Подскажите, есть данный код. Устанавливается значение (ver_val) и затем это значение 10 раз измеряется и добавляется в датафрейм. И так по кругу пока не закончатся значения в (ver_val). В результате данные измерения записываются в csv файл в одну колонку. Собственно вопрос: как сделать вывод первых 10 измерений в столбец, далее следующие 10 в следующий столбцец и так далее.
Спасибо.

 for value in ver_val[rang]:
        set_value = float(value)
        cal.out_set(set_value)  # enable output
        cal.out_enable()
        # Wait for output to settle and read output
        cal.inst.write("*WAI; OUT?")
        time.sleep(3)  # take a nap few seconds
        cal.out_read()
        val = []
        for samples in range(10):  # количество измерений
            meas['Measurements'] = dmm.get_data()
            print("Измерение %d: %.9f В" % (samples + 1, dmm_val))
            val.append(dmm_val)  # Создает список из количества измерений
            measurements = measurements.append(meas, ignore_index=True)

Офлайн

#2 Янв. 26, 2021 00:49:51

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Вывод результата по столбцам

Irv1n
как сделать вывод первых 10 измерений в столбец, далее следующие 10 в следующий столбцец и так далее.
  
>>> def split_list(lst, n):
...     out = []
...     tmp = []
...     for i in lst:
...         tmp.append(i)
...         if len(tmp) == n:
...             out.append(tmp)
...             tmp = []
...     if tmp:
...         out.append(tmp)
...     return out
... 
>>> def transpose(mtx):
...     out = []
...     columns = tuple(map(iter, mtx))
...     while True:
...         outrow = [next(i, None) for i in columns]
...         if outrow == [None] * len(outrow):
...             break
...         out.append(outrow)
...     return out
... 
>>> lst = list(range(50))
>>> lst
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
>>> 
>>> split = split_list(lst, 10)
>>> split
[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16, 17, 18, 19], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35, 36, 37, 38, 39], [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]]
>>> 
>>> transposed = transpose(split)
>>> transposed
[[0, 10, 20, 30, 40], [1, 11, 21, 31, 41], [2, 12, 22, 32, 42], [3, 13, 23, 33, 43], [4, 14, 24, 34, 44], [5, 15, 25, 35, 45], [6, 16, 26, 36, 46], [7, 17, 27, 37, 47], [8, 18, 28, 38, 48], [9, 19, 29, 39, 49]]
>>> 
>>> for i in transposed:
...     print(('{:5d}' * len(transposed[0])).format(*i))
... 
    0   10   20   30   40
    1   11   21   31   41
    2   12   22   32   42
    3   13   23   33   43
    4   14   24   34   44
    5   15   25   35   45
    6   16   26   36   46
    7   17   27   37   47
    8   18   28   38   48
    9   19   29   39   49
>>>


tags: transpose



Отредактировано py.user.next (Янв. 26, 2021 00:52:08)

Офлайн

#3 Янв. 28, 2021 16:14:42

Irv1n
Зарегистрирован: 2018-09-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата по столбцам

Спасибо, все работает! Может еще кто поможет с такой задачей:

 ver_val = OrderedDict()
ver_val[0.1] = [0.1, -0.1]
ver_val[1] = [1, -1]
ver_val[10] = [1, 5, 10, -1, -5, -10]
ver_val[100] = [100, -100]
ver_val[1000] = [1000, -1000]
results = pd.DataFrame()
measurements = pd.DataFrame()
calc = {}
meas = {}
calc_pool = []
# val2 = []
# Цикл на установку диапазона и обнуление мультиметра
for rang in ver_val:
    cal.out_set("0 mV")
    cal.out_enable()
    # Wait for output to settle and read output
    cal.inst.write("*WAI; OUT?")
    time.sleep(3)  # take a nap few seconds
    dmm.set_range(rng=str(rang))
    # dmm.set_null()
    time.sleep(3)
    # Цикл на установку точек калибровки
    for value in ver_val[rang]:
        set_value = float(value)
        cal.out_set(set_value)  # enable output
        cal.out_enable()
        # Wait for output to settle and read output
        cal.inst.write("*WAI; OUT?")
        time.sleep(3)  # take a nap few seconds
        cal.out_read()
        # Цикл на количество измерений в одной точке
        val = []
        for samples in range(2):  # количество измерений
            meas['Measurements'] = dmm.get_data()
            dmm.get_data()
            print("Измерение %d: %.9f В" % (samples + 1, dmm_val))
            val.append(dmm_val)  # Создает список из количества измерений
            measurements = measurements.append(meas, ignore_index=True)
Программа работает так: Есть два измерительных прибора - Калибратор и Мультиметр. На мультиметре устанавливается диапазон (ключ из словаря), и калибратор подаетзаданные точки на мультиметр (значения из словаря), далее мультиметр измеряет эти точки(здесь их две) и далее измерения добавляются вдатафрейм. Хотелось бы увидеть датафрейм в таком виде (исходя из значений из словаря, они там могут меняться):
Устан. знач. 0.1 -0.1 1 -1
0 0.099999 -0.099998 1.0000000 -1.0000032
1 0.099998 -0.0999997 1.0000076 -1.0000031
2 0.099999 -0.099998 1.0000032 -1.0000031

здесь -0.1, -0.1, 1, -1 - это значения из словаря(set_value = float(value)) уст. на калиб., под ними значения измеренные на мультиметре (meas = dmm.get_data()).
и продолжить датафрейм далее согласно словарю.
Прошу прощения за данные вопросы, только начал изучать python на примерах
Заранее спасибо.

Отредактировано Irv1n (Янв. 28, 2021 16:23:25)

Офлайн

#4 Янв. 29, 2021 00:09:00

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9897
Репутация: +  855  -
Профиль   Отправить e-mail  

Вывод результата по столбцам

Irv1n
только начал изучать python на примерах
Ты не знаешь, что pandas - это не питон, а сторонний модуль, который вообще нужно изучать отдельно от питона. Сначала надо изучать питон, потом только надо изучать pandas. И то не факт, что в этом будет необходимость, потому что есть много сторонних модулей, которые конкурируют друг с другом. К тому же питон всё это может делать вообще без модулей.
Поэтому уйди с pandas, останься на питоне. Все эти массивы можно на питоне делать. И потом, когда тебе pandas понадобится и ты его будешь знать вдобавок к этому, тогда ты и будешь на нём писать.



Офлайн

#5 Янв. 29, 2021 22:54:37

Irv1n
Зарегистрирован: 2018-09-02
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод результата по столбцам

py.user.next спасибо Вам за информацию. Не ищем легких путей . Свою задачу решил, остался вопрос:
как сделать название столбца(колонки) из двух значений, к примеру

Диапазон: 0.1
Точка 0.1

0.0999999
0.0999996
0.0999997

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version