第二章 - 数据筛选#

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

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

对于震级列,不需要做太多,因为它只是一个浮点数。可以特别小心地检查数据是否正确。通过筛选满足条件“震级> 0”的数据,可以避免错误数据或意外行为。

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

以下脚本如前所述筛选和格式化CSV数据

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

现在你已经有一个QDateTime和浮点数的元组,尝试进一步改进输出。接下来的章节将介绍这一点。