首页 > 解决方案 > 只导入我的一列的最大值

问题描述

我正在使用matplotliband numpy,我正在制作图表。我使用的数据格式是.csv. 在csv我使用的文件中有三列。我想知道,有没有办法只导入数据,直到我的一个列的峰值/最小值?

背景:我正在使用具有脂质单层的 Langmuir 槽并压缩和扩展屏障以增加/减少我试图针对该区域绘制压力和荧光的区域。但是,获取这些数据的程序会执行一个完整的压缩和扩展循环,当波谷处于其最小区域时,我不能简单地停止数据收集。所以我想让 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 的内容,但它似乎不起作用?我仍然得到包含在我的图形代码中的所有值,如下所示 import matplotlib.pyplot as plt import numpy as np import pandas as 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()

标签: pythonnumpymatplotlib

解决方案


我的理解是文件会及时更改,因此您希望能够检查是否检测到最小值。如果您注意文件更改,请认为您可以做到这一点。下面我提供了最简单的方法,但您可以通过添加一些超时来“强化”它。

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,))

推荐阅读