第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数据的元组,尝试进一步改进输出。这就是你将在接下来的章节中学到的内容。