【发布时间】:2017-01-25 11:41:12
【问题描述】:
我是 python 新手,想弄清楚如何遍历 2x2 矩阵。
我的起点是一个 *.csv 文件,其中包含大量数据(10 列,173828 行)。因为我只需要第一列(sigma_0 值)和第六列(日期),所以我做了一个矩阵叫做 sigma_JD,它只包含这两列:
import csv
import numpy as np
with open("C:/Users/.../03971822.csv") as input_file:
reader = csv.reader(input_file)
array = []
for row in reader:
array.append(row)
matrix = np.asmatrix(array)
idx_IN_columns = [0, 5]
sigma_JD = matrix[:, idx_IN_columns]
print(sigma_JD)
print("size sigma_JD: ", np.shape(sigma_JD))
>>> print(sigma_JD)
[['-12.42' '2451544.576']
['-12.92' '2451544.576']
['-12.45' '2451544.576']
...,
['-11.66' '2454688.389']
['-12.61' '2454688.389']
['-11.72' '2454688.389']]
>>> print("size sigma_JD: ", np.shape(sigma_JD))
size sigma_JD: (173828, 2)
现在我想遍历第二列 - 日期;它以特定方式显示,称为“朱利安日”,例如JD值是
2451544,5 = 01/January/2000 0:00 2451545,5 = 02/January/2000 0:00 2451546,5 = 03/January/2000 0:00
2451544 表示日/月/年,小数位表示时间。
我想编写一个代码,其中考虑了所有 sigma_0 值,它们都在一天之内。因此,循环应该使用特定的值,而不是通过索引。
它应该从 2451544,5 开始,然后考虑当天所有的 sigma_0 值(并总结),然后转到第二天 2451544,5 并执行相同的操作....
我试过了。像这样,但它不起作用
x = 2451544.5
y = x + 1
for i in sigma_JD[:, 1]:
while x < y:
print(sigma_JD[i, 1])
break
然后我想创建自己的函数,但没有走那么远:
def select(x):
count = 2451544.5
select = []
for i in range(0, len(x[:, 1])): # loop over Julian Day
if count < count + 1:
row = []
for j in range(0, len(x[:, 0])): # loop over sigma_0 values
# take all sigma_0 values and sum it up
count += 1
return select
如果有人能帮助我,那就太好了。我为此工作了好几天,真的让我很沮丧,我不知道如何完成这项工作。
非常感谢。
【问题讨论】:
-
您可以考虑使用 pandas 来完成此任务。它在后台使用 numpy,但它允许您读取 csv、将 datetime 列转换为日期并提供简单易用的 groupby 函数。 pandas.pydata.org/pandas-docs/stable/index.html