Python 从数据框打印特定的行和列元素
我使用循环导入了4个csv文件。现在我想检查“通道”列中的哪个位置,响应超过某个阈值,并打印“时间”列中的时间和“通道”列中的电压值。我只希望四个通道中的第一个实例中的值超过阈值。所以我想对它执行以下操作Python 从数据框打印特定的行和列元素,python,pandas,dataframe,Python,Pandas,Dataframe,我使用循环导入了4个csv文件。现在我想检查“通道”列中的哪个位置,响应超过某个阈值,并打印“时间”列中的时间和“通道”列中的电压值。我只希望四个通道中的第一个实例中的值超过阈值。所以我想对它执行以下操作 如果任何通道中的最大值小于阈值,我想将阈值减半 在找到“每列的值在哪里”超过阈值后,如何打印“时间”和发生此情况的值 下面是代码和dfs的外观。任何帮助或建议都会很好!谢谢 import pandas as pd import numpy as np import matplotlib.p
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pathlib import Path
global df
df = pd.DataFrame([])
def function_plot(*xyzv, Plot_ShareY=True): #x, y, z, v is filename
# data paths
dps = [Path(f) for f in xyzv]
for dp in dps:
print(dp)
#dataframes - loads the csv file from the paths created above
dfs = [pd.read_csv(dp, delimiter=";", skiprows=(1, 2), decimal=",", na_values=['no info', '.']) for dp in dps]
times = [df['Time'] for df in dfs]
y_labels = ['A', 'B', 'C', 'D']
ch = [('Channel A', 'r'), ('Channel B', 'g'), ('Channel C', 'b'), ('Channel D', 'y')]
ch_vals = [('Channel A'), ('Channel B'), ('Channel C'), ('Channel D')]
threshold_abs = 0.003
for df in dfs:
if threshold_abs > np.max(ch_vals):
threshold_abs = threshold_abs / 2
print(threshold_abs)
location = [df[ch_vals]>threshold_abs]
print(location)
fig, *axes = plt.subplots(len(dfs), 1, figsize=(12, 8))
fig.suptitle('Drops')
for x, ax, df, y_label in zip(times, axes[0], dfs, y_labels):
for channel, colour in ch:
ax.plot(x, df[channel], colour)
ax.set_ylabel(y_label)
ax.set_xlabel('Time [ms]')
plt.show()
我希望问题2的输出如下:
['Time':0.2,'Channel A':0.445,'Time':0.1,'Channel B':0.4385,'Time':0.2,'Channel C':0.425,'Time':0.4,'Channel D D':0.4145,]在这里,您可以执行操作来计算布尔值:
location = [df[ch_vals]>threshold_abs]
这就是它返回true/false的原因
如果要筛选DataFrame以仅显示location变量中为true的行,则可以按如下方式应用它:
df.loc[location]
代码中的Chu vals只是一个字符串列表,当您使用它来查询数据帧“df[Chu vals]”时,它将从数据帧返回数组中列出的列列表。谢谢。第一个问题很清楚。2和3不是。np.max()仍在给出一个错误,使用df.loc(正如您所建议的)会给出一个错误,如:“PandaArray必须是一维的。”使用df.iloc时,它会说:“布尔索引的长度错误:1而不是200004”正确。要使loc正常工作,您需要一维数组/数据帧。df[Chu vals]提供4列的数据帧。请提供您正在尝试执行的操作的其他逻辑。我的阈值为0.003,我希望在所有这4列中进行检查,其中该值超过阈值。我只希望这是第一次发生。因此,当检测到第一个实例时,我想打印这些值(以及发生这种情况的时间值),最后将它们绘制在现有的图表上。这个问题太广泛了。请试着把它分成更小的问题,并为每个问题提供更多的信息,如代码样本、样本数据为文本(不是pic)、所需输出为文本等。我尽可能地修改了它。