gpt4 book ai didi

python - 将 csv 文件加载到 numpy 并按名称访问列

转载 作者:太空狗 更新时间:2023-10-29 20:54:06 25 4
gpt4 key购买 nike

我有一个 csv 文件,其标题如下:

给定此 test.csv 文件:

"A","B","C","D","E","F","timestamp"
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291111964948E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291113113366E12
611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291120650486E12

我只是想将它加载为一个 3 行 7 列的矩阵/ndarray,我还想从给定的列名访问列向量。如果我使用 genfromtxt(如下所示),我会得到一个包含 3 行(每行一个)且没有列的 ndarray。

r = np.genfromtxt('test.csv',delimiter=',',dtype=None, names=True)
print r
print r.shape

[ (611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291111964948.0)
(611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291113113366.0)
(611.88243, 9089.5601000000006, 5133.0, 864.07514000000003, 1715.3747599999999, 765.22776999999996, 1291120650486.0)]
(3,)

我可以像这样从列名中获取列向量:

print r['A']
[ 611.88243 611.88243 611.88243]

如果,我使用 load.txt,那么我会得到一个 3 行 7 列的数组,但无法使用 column 访问 columns名称(如下所示)。

numpy.loadtxt(open("test.csv","rb"),delimiter=",",skiprows=1)

我明白了

  [ [611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291111964948E12]
[611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291113113366E12]
[611.88243,9089.5601,5133.0,864.07514,1715.37476,765.22777,1.291120650486E12] ]

Python 中是否有任何方法可以同时满足这两个要求(按 np.genfromtext 之类的列名称访问列并具有 np.loadtxt 之类的矩阵) ?

最佳答案

单独使用 numpy,您显示的选项是您唯一的选择。使用形状为 (3,7) 的同质数据类型的 ndarray,或者使用(可能)异质数据类型和形状为 (3,) 的结构化数组。

如果你真的想要一个带有标签列和形状 (3,7) 的数据结构,(以及许多其他好东西)你可以使用 pandas数据框:

In [67]: import pandas as pd
In [68]: df = pd.read_csv('data'); df
Out[68]:
A B C D E F timestamp
0 611.88243 9089.5601 5133 864.07514 1715.37476 765.22777 1.291112e+12
1 611.88243 9089.5601 5133 864.07514 1715.37476 765.22777 1.291113e+12
2 611.88243 9089.5601 5133 864.07514 1715.37476 765.22777 1.291121e+12

In [70]: df['A']
Out[70]:
0 611.88243
1 611.88243
2 611.88243
Name: A, dtype: float64

In [71]: df.shape
Out[71]: (3, 7)

纯 NumPy/Python 的替代方案是使用字典将列名映射到索引:

import numpy as np
import csv
with open(filename) as f:
reader = csv.reader(f)
columns = next(reader)
colmap = dict(zip(columns, range(len(columns))))

arr = np.matrix(np.loadtxt(filename, delimiter=",", skiprows=1))
print(arr[:, colmap['A']])

产量

[[ 611.88243]
[ 611.88243]
[ 611.88243]]

这样,arr 是一个 NumPy 矩阵,其中的列可以通过标签使用语法访问

arr[:, colmap[column_name]]

关于python - 将 csv 文件加载到 numpy 并按名称访问列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24143807/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com