NumPy에서 CSV 데이터를 레코드 배열로 읽는 방법은 무엇입니까?
나는 많은 방법으로, 기록 배열로 CSV 파일의 내용을 가져올 수있는 직접적인 방법이 있는지 궁금 개의 R read.table()
, read.delim()
및 read.csv()
R의 데이터 프레임에 가족의 수입 데이터?
또는 csv.reader () 를 사용 하고 다음과 같은 것을 적용 하는 가장 좋은 방법 numpy.core.records.fromrecords()
입니까?
kwarg를 쉼표로 genfromtxt()
설정하여 Numpy의 방법을 사용할 수 있습니다 delimiter
.
from numpy import genfromtxt
my_data = genfromtxt('my_file.csv', delimiter=',')
기능에 대한 자세한 내용은 해당 설명서를 참조하십시오 .
라이브러리 에서 read_csv
함수를 권장합니다 pandas
.
import pandas as pd
df=pd.read_csv('myfile.csv', sep=',',header=None)
df.values
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
이것은 pandas DataFrame을 제공하여 numpy 레코드 배열에서 직접 사용할 수없는 많은 유용한 데이터 조작 기능을 허용 합니다 .
DataFrame은 잠재적으로 다른 유형의 열이있는 2 차원 레이블이 지정된 데이터 구조입니다. 스프레드 시트 또는 SQL 테이블처럼 생각할 수 있습니다 ...
나는 또한 추천 할 것이다 genfromtxt
. 그러나 질문은 일반 배열과 달리 레코드 배열을 요청 하므로 dtype=None
매개 변수를 genfromtxt
호출에 추가해야합니다 .
입력 파일이 주어지면 myfile.csv
:
1.0, 2, 3
4, 5.5, 6
import numpy as np
np.genfromtxt('myfile.csv',delimiter=',')
배열을 제공합니다.
array([[ 1. , 2. , 3. ],
[ 4. , 5.5, 6. ]])
과
np.genfromtxt('myfile.csv',delimiter=',',dtype=None)
레코드 배열을 제공합니다.
array([(1.0, 2.0, 3), (4.0, 5.5, 6)],
dtype=[('f0', '<f8'), ('f1', '<f8'), ('f2', '<i4')])
이는 여러 데이터 유형 (문자열 포함)이있는 파일을 쉽게 가져올 수 있다는 장점이 있습니다 .
또한 recfromcsv()
데이터 형식을 추측하고 올바른 형식의 레코드 배열을 반환 할 수 있습니다.
나는 시간을
from numpy import genfromtxt
genfromtxt(fname = dest_file, dtype = (<whatever options>))
대
import csv
import numpy as np
with open(dest_file,'r') as dest_f:
data_iter = csv.reader(dest_f,
delimiter = delimiter,
quotechar = '"')
data = [data for data in data_iter]
data_array = np.asarray(data, dtype = <whatever options>)
약 70 개의 열이있는 460 만 개의 행에서 NumPy 경로가 2 분 16 초가 걸리고 csv-list 이해 방법이 13 초가 걸린다는 것을 발견했습니다.
csv-list comprehension 방법은 NumPy만큼 해석기가 아닌 사전 컴파일 된 라이브러리에 의존하기 때문에 권장합니다. 팬더 메소드에는 비슷한 인터프리터 오버 헤드가있을 것으로 생각됩니다.
NumPy와 Pandas를 사용하여 두 가지 방법을 시도했지만 팬더를 사용하면 많은 이점이 있습니다.
- 더 빠른
- 적은 CPU 사용량
- NumPy genfromtxt에 비해 1/3 RAM 사용
이것은 내 테스트 코드입니다.
$ for f in test_pandas.py test_numpy_csv.py ; do /usr/bin/time python $f; done
2.94user 0.41system 0:03.05elapsed 109%CPU (0avgtext+0avgdata 502068maxresident)k
0inputs+24outputs (0major+107147minor)pagefaults 0swaps
23.29user 0.72system 0:23.72elapsed 101%CPU (0avgtext+0avgdata 1680888maxresident)k
0inputs+0outputs (0major+416145minor)pagefaults 0swaps
test_numpy_csv.py
from numpy import genfromtxt
train = genfromtxt('/home/hvn/me/notebook/train.csv', delimiter=',')
test_pandas.py
from pandas import read_csv
df = read_csv('/home/hvn/me/notebook/train.csv')
데이터 파일:
du -h ~/me/notebook/train.csv
59M /home/hvn/me/notebook/train.csv
버전에서 NumPy 및 pandas 사용 :
$ pip freeze | egrep -i 'pandas|numpy'
numpy==1.13.3
pandas==0.20.2
이 코드를 사용하여 CSV 파일 데이터를 배열로 보낼 수 있습니다.
import numpy as np
csv = np.genfromtxt('test.csv', delimiter=",")
print(csv)
나는 이것을 시도했다 :
import pandas as p
import numpy as n
closingValue = p.read_csv("<FILENAME>", usecols=[4], dtype=float)
print(closingValue)
아주 간단한 방법입니다. 그러나 모든 요소가 부동이어야합니다 (int 등)
import numpy as np
data = np.loadtxt('c:\\1.csv',delimiter=',',skiprows=0)
가장 쉬운 방법입니다.
import csv with open('testfile.csv', newline='') as csvfile: data = list(csv.reader(csvfile))
이제 데이터의 각 항목은 레코드로 배열로 표시됩니다. 따라서 2D 배열이 있습니다. 너무 많은 시간을 절약했습니다.
테이블 ( pip3 install tables
)을 사용하는 것이 좋습니다 . 팬더 ( ) .csv
를 .h5
사용 하여 파일을 저장할 수 있습니다 pip3 install pandas
.
import pandas as pd
data = pd.read_csv("dataset.csv")
store = pd.HDFStore('dataset.h5')
store['mydata'] = data
store.close()
그런 다음 대량의 데이터라도 쉽고 빠르게 적은 시간으로 NumPy 배열 에 데이터를로드 할 수 있습니다 .
import pandas as pd
store = pd.HDFStore('dataset.h5')
data = store['mydata']
store.close()
# Data in NumPy format
data = data.values
이것은 매력으로 작동합니다 ...
import csv
with open("data.csv", 'r') as f:
data = list(csv.reader(f, delimiter=";"))
import numpy as np
data = np.array(data, dtype=np.float)
참고 URL : https://stackoverflow.com/questions/3518778/how-do-i-read-csv-data-into-a-record-array-in-numpy
'Programing' 카테고리의 다른 글
비동기 화살표 기능의 구문 (0) | 2020.02.28 |
---|---|
프로세스 종료 코드를 기반으로 종료 쉘 스크립트 (0) | 2020.02.27 |
목록을 초기화하는 방법 (0) | 2020.02.27 |
Ruby : 연결없이 여러 줄로 된 문자열을 쓸 수 있습니까? (0) | 2020.02.27 |
iPhone은 첫 페이지에서만 탐색 모음을 숨 깁니다. (0) | 2020.02.27 |