【问题标题】:How can i take values from csv file and print the values that are within + or - 1 of the value?如何从 csv 文件中获取值并打印在值的 + 或 - 1 范围内的值?
【发布时间】:2020-06-23 06:58:27
【问题描述】:

我对python很陌生,所以请多多包涵。

我正在尝试选择打印的值之一,在 csv 文件中找到它,然后在其周围打印 + 或 - 1 值。

这是选择值的代码。

import pandas as pd
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

df = pd.read_csv(r"/Users/aaronhuang/Desktop/ffp/exfileCLEAN2.csv", skiprows=[1])
magnitudes = df['Magnitude '].values
times = df['Time '].values
zscores = np.abs(stats.zscore(magnitudes, ddof=1))
outlier_indicies = np.argwhere(zscores > 3).flatten()
numbers = print(times[outlier_indicies])

打印的值如下。

 2455338.895 2455350.644 2455391.557 2455404.776 2455413.734 2455451.661
 2455473.49  2455477.521 2455507.505 2455702.662 2455734.597 2455765.765
 2455776.575 2455826.593 2455842.512 2455866.508 2455996.796 2456017.767
 2456047.694 2456058.732 2456062.722 2456071.924 2456082.802 2456116.494
 2456116.535 2456116.576 2456116.624 2456116.673 2456116.714 2456116.799
 2456123.527 2456164.507 2456166.634 2456391.703 2456455.535 2456455.6
 2456501.763 2456511.616 2456519.731 2456525.49  2456547.588 2456570.526
 2456595.515 2456776.661 2456853.543 2456920.511 2456953.496 2457234.643
 2457250.68  2457252.672 2457278.526 2457451.89  2457485.722 2457497.93
 2457500.674 2457566.874 2457567.877 2457644.495 2457661.553 2457675.513

下面是 csv 文件的示例。

      Time        Magnitude   Magnitude error 
  2455260.853      19.472             0.150
  2455260.900      19.445             0.126
  2455261.792      19.484             0.168
  2455262.830      19.157             0.261
  2455264.814      19.376             0.150
...           ...         ...               ...
  2457686.478      19.063             0.176
  2457689.480      19.178             0.128
  2457690.475      19.386             0.171
  2457690.480      19.092             0.112
  2457691.476      19.191             0.122

例如,我想选择第一个值,即2455338.895,我想打印它的所有值 + 或 - 1(在时间列中)(稍后绘制图表)。

我们将不胜感激。

提前谢谢你。

【问题讨论】:

    标签: python pandas numpy csv graph


    【解决方案1】:

    我认为这就是您要查找的内容(假设您想要以这种方式提到的单个数字查询):

    numbers = times[outlier_indicies]
    print(df[(df['Time']<numbers[0]+1) & (df['Time']>numbers[0]-1)]['Time'])
    

    循环 numbers 以获取所有间隔很简单,如果您可能对此感兴趣的话。

    编辑: for 循环如下所示:

    print(pd.concat([df[(df['Time']<i+1) & (df['Time']>i-1)]['Time'] for i in numbers]))
    

    如果(numbers[i]-1,numbers[i]+1)中没有重叠区间,则为非循环版本:

    intervals = pd.DataFrame(data={'start': numbers-1,'finish': numbers+1})
    starts = pd.DataFrame(data={'start': 1}, index=intervals.start.tolist())
    finishs = pd.DataFrame(data={'finish': -1},index=intervals.finish.tolist())
    transitions = pd.merge(starts, finishs, how='outer', left_index=True, right_index=True).fillna(0)
    transitions['transition'] = (transitions.pop('finish')+transitions.pop('start')).cumsum()
    B = pd.DataFrame(index=numbers)
    pd.merge(transitions, B, how='outer', left_index=True, right_index=True).fillna(method='ffill').loc[B.index].astype(bool)
    print(transitions[transitions.transition == 1].index)
    

    如果发生重叠,您可以在以下列的帮助下合并intervals 数据框中的连续重叠间隔,然后运行上面的代码(可能需要多几行才能完成):

    intervals['overlapping'] = (intervals.finish - intervals.start.shift(-1))>0
    

    【讨论】:

    • 感谢您的回答,为您的困惑道歉,我正在寻找值周围的所有数字 + 或 -,因为我相信它们需要绘制图表。您将如何打印/绘制所有值?谢谢
    • @AaronHuang 你的数据有多大?
    • 文件很大,有6000行,我很高兴分享这个文件。
    • 如果循环不起作用,解决方案需要不同。我将对其进行编辑以解决无循环。
    • @AaronHuang 请检查编辑,看看循环是否适合您。非循环版本有点棘手。另请查看stackoverflow.com/help/someone-answers,了解如何接受关于 SO 的答案。谢谢。
    【解决方案2】:

    您可以简单地遍历数字:

    all_nums = numbers.split(" ")
    first = all_nums[0]
    threshold = 1
    result = []
    for num in all_nums:
        if abs(float(first) - float(num)) < threshold:
            result.append(num) # float(num) if you want number instead of str
    
    print(result)
    

    【讨论】:

    • 谢谢你的回答,当我尝试代码时,我得到错误' AttributeError: 'numpy.ndarray' object has no attribute 'split' '
    猜你喜欢
    • 2019-08-25
    • 2021-09-12
    • 2022-01-08
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 2019-05-29
    • 2019-05-20
    • 1970-01-01
    相关资源
    最近更新 更多