나는 많은 방법으로, 기록 배열로 CSV 파일의 내용을 가져올 수있는 직접적인 방법이 있는지 궁금 개의 R read.table()
, read.delim()
및 read.csv()
R의 데이터 프레임에 가족의 수입 데이터?
또는 csv.reader () 를 사용 하고 다음과 같은 것을 적용 하는 가장 좋은 방법 numpy.core.records.fromrecords()
입니까?
나는 많은 방법으로, 기록 배열로 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=',')
기능에 대한 자세한 내용은 해당 설명서를 참조하십시오 .
nan
가치 만 얻는 이유는 무엇입니까? 또한 loadtxt를 사용하면을 얻습니다 UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 155: ordinal not in range(128)
. 입력 데이터에 ä 및 ö와 같은 움라우트가 있습니다.
encoding="utf8"
인수를 추가하십시오 . 파이썬은 텍스트 인코딩 문제를 빈번하게 일으키는 몇 가지 최신 소프트웨어 중 하나입니다.
라이브러리 에서 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')])
이는 여러 데이터 유형 (문자열 포함)을 가진 파일을 쉽게 가져올 수 있다는 장점이 있습니다 .
(1000, 1)
. np.genfromtxt
그렇게하지 않습니다 : 예 (1000,)
.
나는 시간을
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.recfromcsv(fname, delimiter=',', filling_values=numpy.nan, case_sensitive=True, deletechars='', replace_space=' ')
. 주요 인수는 마지막 세 개입니다.
NumPy와 Pandas를 사용하여 두 가지 방법을 시도했지만 팬더를 사용하면 많은 이점이 있습니다.
이것은 내 테스트 코드입니다.
$ 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
from numpy import genfromtxt
train = genfromtxt('/home/hvn/me/notebook/train.csv', delimiter=',')
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)
나는 이것을 시도했다 :
import pandas as p
import numpy as n
closingValue = p.read_csv("<FILENAME>", usecols=[4], dtype=float)
print(closingValue)
테이블 ( 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