如何将 CSV 加载到字典(哈希)中?
How to load a CSV into a dictionary (hash)?
我正在处理(未排序的)CSV 文件,其中某些列包含 key,而另一列是 value .比方说,每行的列 (1, 2, 3, 7) 包含键,第 11 列是该行的值。
我想将它们加载到散列中,以便能够快速访问键的值。我是 NumPy 的新手,对 numpy.loadtxt()
的速度和易用性印象最深——我可以准确地为它提供我感兴趣的列,并且它可以快速加载非常大的 CSV 文件。
但它将它们加载到一个平面 ndarray
-- 而不是字典中。我怎样才能以与 loadtxt()
相似的速度和轻松程度获得类似哈希的东西?
在 Python 中一次 读取一行——例如使用 csv
包——很慢。将 ndarray
循环到 将数据复制 到散列中既缓慢又浪费。
也许还有其他一些快速的单行代码?或者巧妙地使用相同的 loadtxt()
,这将生成具有 $O(log(n))$ 查找的散列(或类似散列)对象?
你可以试试:
d = pd.read_csv('data.txt', header=None, usecols=[1, 2, 3, 7, 11],
index_col=[0, 1, 2, 3], sep=' ')[11].to_dict()
一些信息:
header=None
:将第一行视为数据而不是列名
usecols=[1, 2, 3, 7, 11]
: select 只有有用的列
index_col=[0, 1, 2, 3]
:定义第1、2、3、7列为索引(key)
sep=' '
:loadtxt
的默认分隔符
[11]
:提取值列
.to_dict()
:将您的 series
转换为 dict
Python有这个能力built-in:
import csv
read_data =[]
with open('data.txt', 'r') as fin:
reader = csv.DictReader(sep=' ')
for line in reader:
read_data.append([line[1], line[2], line[3], line[7], line[11]])
我正在处理(未排序的)CSV 文件,其中某些列包含 key,而另一列是 value .比方说,每行的列 (1, 2, 3, 7) 包含键,第 11 列是该行的值。
我想将它们加载到散列中,以便能够快速访问键的值。我是 NumPy 的新手,对 numpy.loadtxt()
的速度和易用性印象最深——我可以准确地为它提供我感兴趣的列,并且它可以快速加载非常大的 CSV 文件。
但它将它们加载到一个平面 ndarray
-- 而不是字典中。我怎样才能以与 loadtxt()
相似的速度和轻松程度获得类似哈希的东西?
在 Python 中一次 读取一行——例如使用 csv
包——很慢。将 ndarray
循环到 将数据复制 到散列中既缓慢又浪费。
也许还有其他一些快速的单行代码?或者巧妙地使用相同的 loadtxt()
,这将生成具有 $O(log(n))$ 查找的散列(或类似散列)对象?
你可以试试:
d = pd.read_csv('data.txt', header=None, usecols=[1, 2, 3, 7, 11],
index_col=[0, 1, 2, 3], sep=' ')[11].to_dict()
一些信息:
header=None
:将第一行视为数据而不是列名usecols=[1, 2, 3, 7, 11]
: select 只有有用的列index_col=[0, 1, 2, 3]
:定义第1、2、3、7列为索引(key)sep=' '
:loadtxt
的默认分隔符
[11]
:提取值列.to_dict()
:将您的series
转换为dict
Python有这个能力built-in:
import csv
read_data =[]
with open('data.txt', 'r') as fin:
reader = csv.DictReader(sep=' ')
for line in reader:
read_data.append([line[1], line[2], line[3], line[7], line[11]])