第二章 - 数据筛选#
在上一章中,你了解了如何读取和打印一些原始数据。现在,尝试选择几列并正确处理它们。
从以下两列开始:时间(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和浮点数的元组,尝试进一步改进输出。接下来的章节将介绍这一点。