第2章 - 数据过滤

在上一章中,您学习了如何读取和打印一些原始数据。现在,尝试选择几列并正确处理它们。

从这两列开始:时间(time)和震级(mag)。从这些列中获取信息后,过滤并调整数据。尝试将日期格式化为Qt类型。

对于Magnitude列,没有太多需要做的,因为它只是一个浮点数。你可以特别注意检查数据是否正确。这可以通过过滤符合条件“magnitude > 0”的数据来完成,以避免错误数据或意外行为。

日期列提供的数据是UTC格式(例如,2018-12-11T21:14:44.682Z),因此您可以轻松地将其映射到定义字符串结构的QDateTime对象。此外,您可以使用QTimeZone根据您所在的时区调整时间。

以下脚本按照之前的描述过滤并格式化CSV数据:

 1from __future__ import annotations
 2
 3import argparse
 4import pandas as pd
 5
 6from PySide6.QtCore import QDateTime, QTimeZone
 7
 8
 9def transform_date(utc, timezone=None):
10    utc_fmt = "yyyy-MM-ddTHH:mm:ss.zzzZ"
11    new_date = QDateTime().fromString(utc, utc_fmt)
12    if timezone:
13        new_date.setTimeZone(timezone)
14    return new_date
15
16
17def read_data(fname):
18    # Read the CSV content
19    df = pd.read_csv(fname)
20
21    # Remove wrong magnitudes
22    df = df.drop(df[df.mag < 0].index)
23    magnitudes = df["mag"]
24
25    # My local timezone
26    timezone = QTimeZone(b"Europe/Berlin")
27
28    # Get timestamp transformed to our timezone
29    times = df["time"].apply(lambda x: transform_date(x, timezone))
30
31    return times, magnitudes
32
33
34if __name__ == "__main__":
35    options = argparse.ArgumentParser()
36    options.add_argument("-f", "--file", type=str, required=True)
37    args = options.parse_args()
38    data = read_data(args.file)
39    print(data)
40

现在你有了一个包含QDateTime和float数据的元组,尝试进一步改进输出。这就是你将在接下来的章节中学到的内容。