从数组中选择给定另一个值的条目

6
我有一个格式为(日期,时间,电阻)的文本文件:
12/11/2013  13:20:38    28.321930E+3
...         ...             ...

我需要从第一条数据输入后的每6秒提取电阻值(第三列)。首先,我想使用以下方法导入文本文件:

date, time, resistance = loadtxt('Thermometers.txt', unpack=True, usecols=[0,1,2])

然而在我刚开始程序之前,我遇到了以下错误:

ValueError: invalid literal for float(): 12/11/2013

-此外-

我不确定如何迭代时间,因为日期随着过夜的数据运行而改变。对我的问题提供优美的解决方案将不胜感激。


打开文本文件对象并进行readline,最后进行the_line.split()是否存在问题? - Jack_of_All_Trades
我需要从一个时间间隔中提取数据,这还需要考虑日期。 - user2992169
numpy.loadtxt(fname, dtype=<type 'float'>, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0)从文本文件中加载数据。文本文件中的每行必须具有相同数量的值。 - user2992169
数据是否以恒定时间间隔采集?此外,我认为@Jack_of_All_Trades的想法是正确的 - 为什么不使用标准的Python读取/字符串操作来读取和拆分行,而不是通过numpy? - darthbith
使用分割和日期时间对象检查我的答案。 - Jack_of_All_Trades
显示剩余2条评论
2个回答

1
我认为这段代码可以实现你想要的功能。此外,你不必担心隔夜数据和日期更改,因为它会将其转换为datetime对象。
    import datetime

    filtered_data=[]

    my_data=open(my_file,'r')
    for line in my_data:

        data_arr=line.split()
        dte=data_arr[0].split("/") r
        tme=data_arr[1].split(":") 
        new_date=datetime.datetime((int(dte[2]),int(dte[0]),int(dte[1]),
                                    int(tme[0]),int(tme[1]),int(tme[2]))

        if filtered_data==[]:
           filtered_data.append(data_arr)

        else:
           if (new_date-old_date).seconds==6:
                filtered_data.append(data_arr)

        old_date=new_date

这将为您提供一个列表,其中项目根据您的情况进行过滤(每6秒钟一次)。现在,如果您只想要分布在6秒间隔的电阻数组,使用简单的循环或类似下面的列表推导即可:
R_in_six_sec_interval=[R[2] for R in filtered_data]

那么,对于解析日期来说,new_date=dateutil.parser.parse(' '.join(data_arr[:2]),dayfirst=True) 怎么样呢? - staticd
几个想法...我认为你需要将“dte”值转换为数字,以使“datetime”保持正常。此外,使用“>= 6”的条件是否更合适?另一个想法是只使用“re.compile(r'[/:\s]+')”拆分一次行。如果您将“old_date”初始化为一个非常旧的值,则可以删除对空“filtered_data”的检查。 - FMc
@FMc:你说得完全正确。我一开始记得,但后来忘了,因为它是由int(...)引起的。我在我的答案中加了注释。现在我有点懒了。我想OP现在应该明白了。 - Jack_of_All_Trades
@FMc:对于大于等于6的情况,我认为OP想要与上一个数据间隔恰好为6秒。 - Jack_of_All_Trades

0

如果你想因为其他原因坚持使用numpy,那么你可能想要看看这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接