python - 只导入我的一列的最大值
问题描述
我正在使用matplotlib
and 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()
解决方案
我的理解是文件会及时更改,因此您希望能够检查是否检测到最小值。如果您注意文件更改,请认为您可以做到这一点。下面我提供了最简单的方法,但您可以通过添加一些超时来“强化”它。
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,))
推荐阅读
- database - Spring-boot 和 Hibernate:如何刷新数据?
- r - 使用不包含字符串的正则表达式过滤闪亮的 DT
- uima - 如何声明#除了换行符以供以后使用?
- javascript - 如何在 Atom 中禁用正则表达式
- json - 如何使用 iOS Swift 访问设备中的 vpn api url?
- javascript - 在构造函数中将函数绑定到“this”有什么作用?
- angular - 没有错误,但 MessageService 不会显示任何内容
- excel - Excel - 相当于Javascript减少功能?
- mysql - 在我的数据库中添加具有“可为空”属性和默认值的新列时,如何在我的代码中保持相同的“INSERT INTO”语句?
- r - 如何从 R 到 Hive 表