복붙노트

[PYTHON] 플로팅을 위해 numpy로 2D 매트릭스에 CSV로드

PYTHON

플로팅을 위해 numpy로 2D 매트릭스에 CSV로드

주어진 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로로드하려고합니다. 그러나, 어떤 이유로 든 numpy에서 빠져 나올 수있는 것은 3 행 (한 줄에 하나)과 열이없는 ndarray입니다.

r = np.genfromtxt(fname,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,)

수동으로 반복하고 원하는 모양으로 해킹 할 수 있지만 바보처럼 보인다. 난 그냥 적절한 매트릭스로 그것을로드하고 싶습니다 그래서 나는 다른 차원을 가로 질러 그것을 조각 수 있으며, MATLAB에서처럼 음모.

해결법

  1. ==============================

    1.순수한 멍청한

    순수한 멍청한

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

    loadtxt 문서를 확인하십시오.

    파이썬의 csv 모듈을 사용할 수도 있습니다 :

    import csv
    import numpy
    reader = csv.reader(open("test.csv", "rb"), delimiter=",")
    x = list(reader)
    result = numpy.array(x).astype("float")
    

    원하는 숫자 유형으로 변환해야합니다. 나는 당신이 한 줄로 모든 것을 쓸 수 있다고 생각한다.

    result = numpy.array(list(csv.reader(open("test.csv", "rb"), delimiter=","))).astype("float")
    

    추가 힌트 :

    또한 pandas.io.parsers.read_csv를 사용하여 더 빠를 수있는 numpy 배열을 얻을 수 있습니다.

  2. ==============================

    2.나는 이름 행이있는 dtype을 사용하는 것이 루틴을 혼란스럽게한다고 생각한다. 시험

    나는 이름 행이있는 dtype을 사용하는 것이 루틴을 혼란스럽게한다고 생각한다. 시험

    >>> r = np.genfromtxt(fname, delimiter=',', names=True)
    >>> r
    array([[  6.11882430e+02,   9.08956010e+03,   5.13300000e+03,
              8.64075140e+02,   1.71537476e+03,   7.65227770e+02,
              1.29111196e+12],
           [  6.11882430e+02,   9.08956010e+03,   5.13300000e+03,
              8.64075140e+02,   1.71537476e+03,   7.65227770e+02,
              1.29111311e+12],
           [  6.11882430e+02,   9.08956010e+03,   5.13300000e+03,
              8.64075140e+02,   1.71537476e+03,   7.65227770e+02,
              1.29112065e+12]])
    >>> r[:,0]    # Slice 0'th column
    array([ 611.88243,  611.88243,  611.88243])
    
  3. ==============================

    3.헤더가있는 CSV 파일을 nP.genfromtxt가있는 NumPy 구조 배열로 읽을 수 있습니다. 예 :

    헤더가있는 CSV 파일을 nP.genfromtxt가있는 NumPy 구조 배열로 읽을 수 있습니다. 예 :

    import numpy as np
    
    csv_fname = 'file.csv'
    with open(csv_fname, 'w') as fp:
        fp.write("""\
    "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
    """)
    
    # Read the CSV file into a Numpy record array
    r = np.genfromtxt(csv_fname, delimiter=',', names=True, case_sensitive=True)
    print(repr(r))
    

    이것은 다음과 같이 보입니다.

    array([(611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29111196e+12),
           (611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29111311e+12),
           (611.88243, 9089.5601, 5133., 864.07514, 1715.37476, 765.22777, 1.29112065e+12)],
          dtype=[('A', '<f8'), ('B', '<f8'), ('C', '<f8'), ('D', '<f8'), ('E', '<f8'), ('F', '<f8'), ('timestamp', '<f8')])
    

    다음과 같이 명명 된 열에 액세스 할 수 있습니다. [ 'E'] :

    array([1715.37476, 1715.37476, 1715.37476])
    

    참고 :이 대답은 이전에 NumPy 레코드 배열로 데이터를 읽는 데 np.recfromcsv를 사용했습니다. 이 방법에는 아무런 문제가 없지만 일반적으로 구조화 된 배열은 속도와 호환성을 위해 레코드 배열보다 낫습니다.

  4. from https://stackoverflow.com/questions/4315506/load-csv-into-2d-matrix-with-numpy-for-plotting by cc-by-sa and MIT license