【问题标题】:csv file to numpy array via Python通过 Python 将 csv 文件转换为 numpy 数组
【发布时间】:2017-01-15 13:51:16
【问题描述】:

我有一个以下格式的 csv 文件,我正在尝试对其进行规范化。数字表示关联字符串的计数。该文件包含近 10 万个条目。

159028,CASSVDGSYEQYFGPG
86832,CASSLQLYFGEG
74720,CASSQDQDTQYFGPG
71701,CASSRVGSDYTFGSG
69360,CARNVTPPKSYAVFFGKG
52458,CAAEQFFGPG
51406,CASSSGDQDTQYFGPG
50305,CASQLYFGEG
38745,CAYFGPG
32565,CASSPDWGENTLYFGAG

我尝试使用以下方法创建字典

import csv
input = csv.DictReader(open("data.csv"))
for row in input:
    print(row)

结果

{'159028': '86832', 'CASSVDGSYEQYFGPG': 'CASSLQLYFGEG'}
{'159028': '74720', 'CASSVDGSYEQYFGPG': 'CASSQDQDTQYFGPG'}
{'159028': '71701', 'CASSVDGSYEQYFGPG': 'CASSRVGSDYTFGSG'}
{'159028': '69360', 'CASSVDGSYEQYFGPG': 'CARNVTPPKSYAVFFGKG'}
{'159028': '52458', 'CASSVDGSYEQYFGPG': 'CAAEQFFGPG'}
{'159028': '51406', 'CASSVDGSYEQYFGPG': 'CASSSGDQDTQYFGPG'}
{'159028': '50305', 'CASSVDGSYEQYFGPG': 'CASQLYFGEG'}
{'159028': '38745', 'CASSVDGSYEQYFGPG': 'CAYFGPG'}
{'159028': '32565', 'CASSVDGSYEQYFGPG': 'CASSPDWGENTLYFGAG'}
...

代替

        {'CASSVDGSYEQYFGPG': 159028}        
        {'CASSLQLYFGEG': '86832'}
        {'CASSQDQDTQYFGPG': '74720'}
        {'CASSRVGSDYTFGSG': '71701'}
        {'CARNVTPPKSYAVFFGKG': '69360'}
        {'CAAEQFFGPG': '52458'}
        {'CASSSGDQDTQYFGPG': '51406'}
        {'CASQLYFGEG': '50305'}
        {'CAYFGPG': '38745'}
        {'CASSPDWGENTLYFGAG': '32565'}
        ...

我也尝试将 csv 文件转换为 numpy 数组,但得到以下结果:

>>>from numpy import genfromtxt
>>>data = genfromtxt('data.csv', delimiter=',')
>>>data
array([[  1.59028000e+05,              nan],
       [  8.68320000e+04,              nan],
       [  7.47200000e+04,              nan],
       ...,
       [  1.00000000e+00,              nan],
       [  1.00000000e+00,              nan],
       [  1.00000000e+00,              nan]])

可能还有其他方法可以通过 Python 对这些数据进行规范化和其他数据处理。

【问题讨论】:

  • file = {x[1]: x[0] for x in np.loadtxt("data.csv", dtype=str, delimiter=",")} 为什么要字典?
  • 您希望第一列是字符串还是整数?

标签: python list csv numpy dictionary


【解决方案1】:

使用 Numpy loadtxt 导入,如果你需要它作为字典,则使用字典推导。

import numpy as np

arr = np.loadtxt('data.csv', dtype=str, delimiter=",")

b = dict([(y, x) for (x, y) in arr])

【讨论】:

    【解决方案2】:

    genfromtxt 有很多参数,可能需要一段时间来学习正确的咒语来读取任何给定的文件。

    以下是您可以使用文件执行此操作的方法。 genfromtxt返回的数组data是一个一维的structured array,有两个字段,分别称为countstring

    In [11]: data = np.genfromtxt("counts_strings.csv", delimiter=',', names=['count', 'string'], dtype=None)
    
    In [12]: data['count']
    Out[12]: 
    array([159028,  86832,  74720,  71701,  69360,  52458,  51406,  50305,
            38745,  32565])
    
    In [13]: data['string']
    Out[13]: 
    array([b'CASSVDGSYEQYFGPG', b'CASSLQLYFGEG', b'CASSQDQDTQYFGPG',
           b'CASSRVGSDYTFGSG', b'CARNVTPPKSYAVFFGKG', b'CAAEQFFGPG',
           b'CASSSGDQDTQYFGPG', b'CASQLYFGEG', b'CAYFGPG', b'CASSPDWGENTLYFGAG'], 
          dtype='|S18')
    
    In [14]: data[0]
    Out[14]: (159028, b'CASSVDGSYEQYFGPG')
    

    【讨论】:

      猜你喜欢
      • 2018-02-18
      • 2017-02-13
      • 2020-02-22
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 2013-05-05
      • 2015-07-04
      • 1970-01-01
      相关资源
      最近更新 更多