Python 从数据框打印特定的行和列元素

Python 从数据框打印特定的行和列元素,python,pandas,dataframe,Python,Pandas,Dataframe,我使用循环导入了4个csv文件。现在我想检查“通道”列中的哪个位置,响应超过某个阈值,并打印“时间”列中的时间和“通道”列中的电压值。我只希望四个通道中的第一个实例中的值超过阈值。所以我想对它执行以下操作 如果任何通道中的最大值小于阈值,我想将阈值减半 在找到“每列的值在哪里”超过阈值后,如何打印“时间”和发生此情况的值 下面是代码和dfs的外观。任何帮助或建议都会很好!谢谢 import pandas as pd import numpy as np import matplotlib.p

我使用循环导入了4个csv文件。现在我想检查“通道”列中的哪个位置,响应超过某个阈值,并打印“时间”列中的时间和“通道”列中的电压值。我只希望四个通道中的第一个实例中的值超过阈值。所以我想对它执行以下操作

  • 如果任何通道中的最大值小于阈值,我想将阈值减半

  • 在找到“每列的值在哪里”超过阈值后,如何打印“时间”和发生此情况的值

  • 下面是代码和dfs的外观。任何帮助或建议都会很好!谢谢

    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)、所需输出为文本等。我尽可能地修改了它。