当我们想要读取一个csv文件中代表日期值的列时,我们必须考虑它的表示方式,例如:
- 2021/12/05 = %Y/%m/%d
- 21/12/05 = %y/%m/%d
- 05/12/2021 = %d/%m/%Y
- 05/12/21 = %d/%m/%y
- 05-12-21 = %d-%m-%y
- ...
这些日期表示方式必须在创建 Lambda 函数时考虑到,我们将在 NumPy 的 getfromtxt() 方法中使用该函数作为转换器。该方法接受多个参数,其中包括我们可以以不同方式使用的转换器,在本例中,它将把一列的值转换为日期类型的值。
converters variable, optional
The set of functions that convert the data of a column to a value. The converters can also be used to provide a default value for missing data:
converters = {num_col: lambda_function }.
num_col - 表示将应用该函数的列的编号
lambda_function - 表示我们将为转换构建的函数
对于这个例子,我们将有两列,日期和级别,由分号(;)和 utf-8 编码分隔:
date |
level |
02-03-15 |
232.8 |
09-03-15 |
233.0 |
16-03-15 |
233.2 |
23-03-15 |
233.6 |
30-03-15 |
233.9 |
06-04-15 |
234.3 |
13-04-15 |
234.8 |
20-04-15 |
235.3 |
27-04-15 |
235.9 |
Our code should be:
import numpy as np
from datetime import datetime
str2date = lambda x: datetime.strptime(x, '%d-%m-%y')
data = np.genfromtxt(file_path, delimiter=';', dtype=None, names=True, converters = {0: str2date}, encoding='utf-8')
变量
file_path 将被替换为文件的目录,包括文件名和扩展名。
分隔符:str、int 或 sequence,可选。用于分隔值的字符串。默认情况下,任何连续的空白字符都作为分隔符。也可以提供整数或每个字段的宽度序列。
数据类型(dtype):dtype,可选。结果数组的数据类型。如果为 None,则会逐个确定每个列的数据类型。
名称:{None、True、str、sequence},可选。如果 names 为 True,则字段名称将从第一行读取,跳过第一个 skip_header 行。此行可以选择由注释分隔符进行分隔。如果 names 是序列或以逗号分隔的单个字符串,则这些名称将用于定义结构化 dtype 中的字段名称。如果 names 为 None,则将使用 dtype 字段的名称(如果有)。
编码:str,可选。用于解码输入文件的编码。
要提取数据并处理数据,我们可以:
levels= data['level']
dates= data['date']
data.csv
文件吗? - Gabriel