수색…


비고

판다 공식 문서에는 파일을 읽고 쓸 수있는 관련 기능 목록과 함께 몇 가지 예와 공통 매개 변수가 포함 된 IO Tools 페이지가 포함되어 있습니다.

DataFrame으로 csv 파일 읽기

다음과 같이 data_file.csv 파일을 읽는 예제입니다.

파일:

index,header1,header2,header3
1,str_data,12,1.4
3,str_data,22,42.33
4,str_data,2,3.44
2,str_data,43,43.34

7, str_data, 25, 23.32

암호:

pd.read_csv('data_file.csv')

산출:

   index    header1  header2  header3
0      1   str_data       12     1.40
1      3   str_data       22    42.33
2      4   str_data        2     3.44
3      2   str_data       43    43.34
4      7   str_data       25    23.32

유용한 인수 :

  • sep 의 기본 필드 구분 기호는 쉼표 , . pd.read_csv('data_file.csv', sep=';') 같이 다른 구분 기호가 필요한 경우이 옵션을 사용하십시오 pd.read_csv('data_file.csv', sep=';')

  • index_col index_col = n ( n 은 정수)를 사용하면 pandas에게 열 n 을 사용하여 DataFrame을 인덱싱하도록 지시합니다. 위의 예에서 :

    pd.read_csv('data_file.csv',  index_col=0)
    

    산출:

              header1  header2  header3
    index
     1       str_data       12     1.40
     3       str_data       22    42.33
     4       str_data        2     3.44
     2       str_data       43    43.34
     7       str_data       25    23.32
    
  • skip_blank_lines 기본적으로 빈 줄은 건너 뜁니다. 빈 줄을 포함 skip_blank_lines=False 를 사용하십시오 ( NaN 값으로 채워질 것입니다)

    pd.read_csv('data_file.csv',  index_col=0,skip_blank_lines=False)
    

    산출:

             header1  header2  header3
    index
     1      str_data       12     1.40
     3      str_data       22    42.33
     4      str_data        2     3.44
     2      str_data       43    43.34
    NaN          NaN      NaN      NaN
     7      str_data       25    23.32
    
  • parse_dates 이 옵션을 사용하여 날짜 데이터를 구문 분석하십시오.

    파일:

    date_begin;date_end;header3;header4;header5
    1/1/2017;1/10/2017;str_data;1001;123,45
    2/1/2017;2/10/2017;str_data;1001;67,89
    3/1/2017;3/10/2017;str_data;1001;0
    

    01 을 날짜로 구문 분석하는 코드 :

    pd.read_csv('f.csv', sep=';', parse_dates=[0,1])
    

    산출:

      date_begin   date_end   header3  header4 header5
    0 2017-01-01 2017-01-10  str_data     1001  123,45
    1 2017-02-01 2017-02-10  str_data     1001   67,89
    2 2017-03-01 2017-03-10  str_data     1001       0
    

    기본적으로 날짜 형식이 유추됩니다. 예를 들어 사용할 수있는 날짜 형식을 지정하려는 경우

    dateparse = lambda x: pd.datetime.strptime(x, '%d/%m/%Y')
    pd.read_csv('f.csv', sep=';',parse_dates=[0,1],date_parser=dateparse)
    

    산출:

      date_begin   date_end   header3  header4 header5
    0 2017-01-01 2017-10-01  str_data     1001  123,45
    1 2017-01-02 2017-10-02  str_data     1001   67,89
    2 2017-01-03 2017-10-03  str_data     1001       0   
    

함수의 매개 변수에 대한 자세한 내용은 공식 문서 에서 확인할 수 있습니다.

csv 파일에 기본 저장

raw_data = {'first_name': ['John', 'Jane', 'Jim'],
            'last_name': ['Doe', 'Smith', 'Jones'],
            'department': ['Accounting', 'Sales', 'Engineering'],}
df = pd.DataFrame(raw_data,columns=raw_data.keys())
df.to_csv('data_file.csv')

CSV에서 읽는 날짜를 파싱하기

csv에서 읽을 때 팬더가 자동으로 구문 분석 할 수 있도록 날짜가 포함 된 열을 지정할 수 있습니다.

pandas.read_csv('data_file.csv', parse_dates=['date_column'])

스프레드 시트에서 DataFrames를 알 수 있습니다.

with pd.ExcelFile('path_to_file.xls) as xl:
    d = {sheet_name: xl.parse(sheet_name) for sheet_name in xl.sheet_names}

특정 시트 읽기

pd.read_excel('path_to_file.xls', sheetname='Sheet1')

read_excel 대한 많은 구문 분석 옵션이 있습니다 ( read_csv 의 옵션과 read_csv .

pd.read_excel('path_to_file.xls',
              sheetname='Sheet1', header=[0, 1, 2],
              skiprows=3, index_col=0)  # etc.

read_csv 테스트

import pandas as pd
import io

temp=u"""index; header1; header2; header3
1; str_data; 12; 1.4
3; str_data; 22; 42.33
4; str_data; 2; 3.44
2; str_data; 43; 43.34
7; str_data; 25; 23.32"""
#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp),  
                 sep = ';', 
                 index_col = 0,
                 skip_blank_lines = True)
print (df)
         header1   header2   header3
index                               
1       str_data        12      1.40
3       str_data        22     42.33
4       str_data         2      3.44
2       str_data        43     43.34
7       str_data        25     23.32

목록 이해력

모든 파일은 폴더 files . 먼저 DataFrames 목록을 만든 다음 concat 합니다.

import pandas as pd
import glob

#a.csv
#a,b
#1,2
#5,8

#b.csv
#a,b
#9,6
#6,4

#c.csv
#a,b
#4,3
#7,0

files = glob.glob('files/*.csv')
dfs = [pd.read_csv(fp) for fp in files]
#duplicated index inherited from each Dataframe
df = pd.concat(dfs)
print (df)
   a  b
0  1  2
1  5  8
0  9  6
1  6  4
0  4  3
1  7  0
#'reseting' index
df = pd.concat(dfs, ignore_index=True)
print (df)
   a  b
0  1  2
1  5  8
2  9  6
3  6  4
4  4  3
5  7  0
#concat by columns
df1 = pd.concat(dfs, axis=1)
print (df1)
   a  b  a  b  a  b
0  1  2  9  6  4  3
1  5  8  6  4  7  0
#reset column names
df1 = pd.concat(dfs, axis=1, ignore_index=True)
print (df1)
   0  1  2  3  4  5
0  1  2  9  6  4  3
1  5  8  6  4  7  0

청크 읽기

import pandas as pd    

chunksize = [n]
for chunk in pd.read_csv(filename, chunksize=chunksize):
    process(chunk)
    delete(chunk)

CSV 파일에 저장

기본 매개 변수로 저장 :

df.to_csv(file_name)

특정 열 작성 :

df.to_csv(file_name, columns =['col'])

Difault 구분 기호는 ','- 변경 :

df.to_csv(file_name,sep="|")

헤더없이 작성 :

df.to_csv(file_name, header=False)

주어진 헤더로 작성 :

df.to_csv(file_name, header = ['A','B','C',...]

특정 인코딩 (예 : 'utf-8')을 사용하려면 인코딩 인수를 사용하십시오.

df.to_csv (file_name, encoding = 'utf-8')

read_csv로 날짜 열 구문 분석

날짜는 항상 다른 형식을 가지며 특정 parse_dates 함수를 사용하여 파싱 할 수 있습니다.

input.csv :

2016 06 10 20:30:00    foo
2016 07 11 19:45:30    bar
2013 10 12 4:30:00     foo

다음과 같이 파싱 할 수 있습니다.

mydateparser = lambda x: pd.datetime.strptime(x, "%Y %m %d %H:%M:%S")
df = pd.read_csv("file.csv", sep='\t', names=['date_column', 'other_column'], parse_dates=['date_column'], date_parser=mydateparser)

parse_dates 인수는 구문 분석 할 열입니다.
date_parser 는 파서 함수입니다.

동일한 구조의 여러 CSV 파일을 하나의 DF로 읽고 병합합니다.

import os
import glob
import pandas as pd

def get_merged_csv(flist, **kwargs):
    return pd.concat([pd.read_csv(f, **kwargs) for f in flist], ignore_index=True)

path = 'C:/Users/csvfiles'
fmask = os.path.join(path, '*mask*.csv')

df = get_merged_csv(glob.glob(fmask), index_col=None, usecols=['col1', 'col3'])

print(df.head())

CSV 파일을 가로로 병합 (열 추가)하려면 pd.concat() 함수를 호출 할 때 axis=1 사용하십시오.

def merged_csv_horizontally(flist, **kwargs):
    return pd.concat([pd.read_csv(f, **kwargs) for f in flist], axis=1)

헤더 행이 없을 때 cvs 파일을 팬더 데이터 프레임으로 읽습니다.

파일에 헤더 행이 없으면,

파일:

1;str_data;12;1.4
3;str_data;22;42.33
4;str_data;2;3.44
2;str_data;43;43.34

7; str_data; 25; 23.32

키워드 names 을 사용하여 열 이름을 제공 할 수 있습니다.

df = pandas.read_csv('data_file.csv', sep=';', index_col=0,
                     skip_blank_lines=True, names=['a', 'b', 'c'])

df
Out: 
           a   b      c
1   str_data  12   1.40
3   str_data  22  42.33
4   str_data   2   3.44
2   str_data  43  43.34
7   str_data  25  23.32

HDFStore 사용

import string
import numpy as np
import pandas as pd

다양한 dtyp을 가진 샘플 DF를 생성한다.

df = pd.DataFrame({
     'int32':    np.random.randint(0, 10**6, 10),
     'int64':    np.random.randint(10**7, 10**9, 10).astype(np.int64)*10,
     'float':    np.random.rand(10),
     'string':   np.random.choice([c*10 for c in string.ascii_uppercase], 10),
     })

In [71]: df
Out[71]:
      float   int32       int64      string
0  0.649978  848354  5269162190  DDDDDDDDDD
1  0.346963  490266  6897476700  OOOOOOOOOO
2  0.035069  756373  6711566750  ZZZZZZZZZZ
3  0.066692  957474  9085243570  FFFFFFFFFF
4  0.679182  665894  3750794810  MMMMMMMMMM
5  0.861914  630527  6567684430  TTTTTTTTTT
6  0.697691  825704  8005182860  FFFFFFFFFF
7  0.474501  942131  4099797720  QQQQQQQQQQ
8  0.645817  951055  8065980030  VVVVVVVVVV
9  0.083500  349709  7417288920  EEEEEEEEEE

더 큰 DF (10 * 100.000 = 1.000.000 행)

df = pd.concat([df] * 10**5, ignore_index=True)

HDFStore 파일 생성 (또는 기존 파일 열기)

store = pd.HDFStore('d:/temp/example.h5')

데이터 프레임을 h5 (HDFStore) 파일에 저장하고 [int32, int64, string] 열을 인덱싱합니다.

store.append('store_key', df, data_columns=['int32','int64','string'])

HDFStore 세부 정보 표시

In [78]: store.get_storer('store_key').table
Out[78]:
/store_key/table (Table(10,)) ''
  description := {
  "index": Int64Col(shape=(), dflt=0, pos=0),
  "values_block_0": Float64Col(shape=(1,), dflt=0.0, pos=1),
  "int32": Int32Col(shape=(), dflt=0, pos=2),
  "int64": Int64Col(shape=(), dflt=0, pos=3),
  "string": StringCol(itemsize=10, shape=(), dflt=b'', pos=4)}
  byteorder := 'little'
  chunkshape := (1724,)
  autoindex := True
  colindexes := {
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "int32": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "string": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "int64": Index(6, medium, shuffle, zlib(1)).is_csi=False}

색인 된 열 표시

In [80]: store.get_storer('store_key').table.colindexes
Out[80]:
{
    "int32": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "string": Index(6, medium, shuffle, zlib(1)).is_csi=False,
    "int64": Index(6, medium, shuffle, zlib(1)).is_csi=False}

스토어 파일 닫기 (디스크에 플러시)

store.close()

Nginx 액세스 로그 읽기 (여러 개의 quotechars)

여러 quotechars의 경우 sep 대신 regex를 사용하십시오.

df = pd.read_csv(log_file,
              sep=r'\s(?=(?:[^"]*"[^"]*")*[^"]*$)(?![^\[]*\])',
              engine='python',
              usecols=[0, 3, 4, 5, 6, 7, 8],
              names=['ip', 'time', 'request', 'status', 'size', 'referer', 'user_agent'],
              na_values='-',
              header=None
                )


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow