Импорт только до максимального значения одного из моих столбцов - PullRequest
0 голосов
/ 01 июня 2018

Я использую matplotlib и numpy, и я делаю графики.Я использую формат данных .csv.В используемом мной файле csv есть три столбца.Интересно, есть ли способ импортировать данные только до пиковых / минимальных значений одного из моих столбцов?

Контекст: я использую желоба Ленгмюра с липидными монослоями и сжимаю и расширяю барьеры для увеличения / уменьшения области. Я пытаюсь изобразить давление и флуоресценцию в этой области.Тем не менее, программа, которая принимает эти данные, выполняет полный цикл сжатия и расширения, и я не могу остановить сбор данных просто, когда впадина находится на минимальной площади.Поэтому я хотел бы, чтобы Python импортировал только до тех пор, пока значение области не достигнет своей нижней точки.

example of how my data looks Area | Presure | Intensity 12500 |3 | 1 11500 |6 | 12 etc |8 |25 3000 |12 |38 3500 |19 |54 <==want it to stop importing here 4500 |16 |47

Возможно ли это?

Я добавил, что Phiпоставил и не работает?Я все еще получаю все значения, включенные в мой код графиков, выглядит как этот импорт matplotlib.pyplot как plt import numpy как np import pandas как pd

df = pd.read_csv("C:\\Users\\Owner\\Desktop\\Thunberg,Dametre\\5-29 Data and 
movies\\New folder (2)\\Data 2.csv", sep=',')
rowmin = df.area.idxmax()
df[:(1 + rowmin)]
fig, ax1 = plt.subplots()
area, pressure, pixel = np.loadtxt 
("C:\\Users\\Owner\\Desktop\\Thunberg,Dametre\\5-29 Data and movies\\New 
folder 
(2)\\Data 2.csv", delimiter=",", skiprows=1, unpack=True)
plt.plot(area,pressure, label='area/pressure!',color='b')

plt.xlabel('area', color='b')
plt.ylabel('Pressure', color='b')
ax1.tick_params('y', colors='b')
ax2 = ax1.twinx()
this ax2 creates a second x axis 
ax2.set_ylabel('Intensity (measured by average pixel value)', color='r')
this labels the secondary axis and chooses its color
ax2.tick_params('y', colors='r')
this Chooses the color of the ticks in the axis
ax2.plot(area,pixel, color='r')
this is what actually plots the second graph of area vs intensity
plt.title('Kibron Trough Pressure-Area-Intensity Graph')
plt.legend()
plt.show()

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Насколько я понимаю, файл изменяется во времени, поэтому вы хотите проверить, был ли обнаружен минимум.Думаю, вы можете сделать это, если будете следить за изменениями файлов.Ниже я приведу самый простой подход, но вы можете «укрепить» его, добавив некоторые тайм-ауты.

import os
import numpy as np
stat_prev = os.stat(fname)
while True:
    data = np.genfromtxt(fname, dtype=np.int, delimiter=',', names=True)
    min_idx = np.argmin(data['Area'])
    if min_idx < len(data) - 1 and data['Area'][min_idx] < data['Area'][min_idx+1]:
        data = data[:min_idx + 1] # <-- remove +1 if min row is the last one
        break # exit main loop;
    # wait for the file to change
    stat_now = os.stat(fname)
    while stat_prev == stat_now: # add some time-out, if you want
        stat_prev = os.stat(fname)

Кроме того, если вам не нужен структурированный массив и просто простой массив, вы можете преобразовать data в простой массив, используя этот рецепт :

data.view(data.dtype[0]).reshape(data.shape + (-1,))
0 голосов
/ 01 июня 2018

Прежде чем читать весь файл, вы не можете быть уверены, какое значение является самым высоким.Более простое решение - прочитать весь файл и затем отбросить строки.

import pandas as pd
df = pd.read_csv('yourfile.csv', sep=',')
rowmax = df.Intensity.idxmax()
df[:(1 + rowmax)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...