将CSV文件转换为Python字典,数组和二进制文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将CSV文件转换为Python字典,数组和二进制文件相关的知识,希望对你有一定的参考价值。

我有一个CSV文件的标签分隔数据与标题和不同类型的数据,我想将其转换为矢量字典。最终我想将字典转换为numpy数组,并将它们存储为某种二进制格式,以便通过不同的脚本快速检索。这是一个包含大约700k记录和16列的大文件。以下是一个示例:

"answer_option" "value" "fcast_date"    "expertise"
"a" 0.8 "2013-07-08"    3
"b" 0.2 "2013-07-08"    3

我已经开始用DictReader类实现它,我正在学习它。

import csv
with open( "filename.tab", 'r') as records:
    reader = csv.DictReader( records, dialect='excel-tab' )
    row = list( reader )
    n = len( row )
    d = {}
    keys = list( row[0] )
    for key in keys :
        a = []
        for i in range(n):
            a.append( row[i][key] )
        d [key] = a

给出了结果

{'answer_option': ['a', 'b'],
'value': ['0.8', '0.2'],
'fcast_date': ['2013-07-08', '2013-07-08'],
'expertise': ['3', '3']}

除了必须从数值中清除包围它们的引号字符的小麻烦之外,我想也许有一些现成的东西。我也想知道是否有任何东西直接从文件中提取到numpy向量中,因为我不需要在字典中转换我的数据。

我看了一下SciPy.org,对CSV的搜索也提到了HDF5和genfromtxt,但我还没有深入研究这些建议。理想情况下,我希望能够以快速加载格式存储数据,这样只需一个命令从其他脚本加载就很简单,其中所有向量都可以在Matlab中以相同的方式使用/八度。建议表示赞赏


编辑:数据是用引号括起来的字符串分隔的。

答案

这将把csv读入Pandas数据框并删除引号:

import pandas as pd
import csv
import io

with open('data_with_quotes.csv') as f_input:
    data = [next(csv.reader(io.StringIO(line.replace('"', '')))) for line in f_input]

df = pd.DataFrame(data[1:], columns=data[0])
print(df)
  answer_option value  fcast_date expertise
0              a   0.8  2013-07-08         3
1              b   0.2  2013-07-08         3

您可以使用df.values轻松地将数据转换为numpy数组:

array([['a', '0.8', '2013-07-08', '3'],
       ['b', '0.2', '2013-07-08', '3']], dtype=object)

要以二进制格式保存数据,我建议使用Hdf5:

import h5py

with h5py.File('file.hdf5', 'w') as f:
    dset = f.create_dataset('default', data=df)

要加载数据,请使用以下命令:

with h5py.File('file.hdf5', 'r') as f:
   data = f['default']

您还可以使用Pandas以二进制格式保存和加载数据:

# Save the data
df.to_hdf('data.h5', key='df', mode='w')

# Load the data
df = pd.read_hdf('data.h5', 'df')

以上是关于将CSV文件转换为Python字典,数组和二进制文件的主要内容,如果未能解决你的问题,请参考以下文章

如何使用列表和字典将字符串转换为二进制代码

将字典转换为 CSV 文件 [重复]

将 csv 文件转换为字典列表

如何将给定的 Excel 文件转换为 Python 中的字典?

在 Python 中将文本表转换为 CSV

将 CSV 文件的内容转换为字典