나는 많은 방법으로, 기록 배열로 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')])
이는 여러 데이터 유형 (문자열 포함)을 가진 파일을 쉽게 가져올 수 있다는 장점이 있습니다 .
답변
나는 시간을
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 이해 방법은 NumPy만큼의 인터프리터가 아닌 사전 컴파일 된 라이브러리에 의존하기 때문에 권장합니다. 나는 판다 방법이 비슷한 해석기 오버 헤드를 가질 것이라고 생각합니다.
답변
또한 recfromcsv()
데이터 형식을 추측하고 올바른 형식의 레코드 배열을 반환 할 수 있습니다.
답변
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)
답변
아주 간단한 방법입니다. 그러나 모든 요소가 부동이어야합니다 (int 등)
import numpy as np
data = np.loadtxt('c:\\1.csv',delimiter=',',skiprows=0)