pandas                
            Pandas IOツール(データセットの読み取りと保存)
        
        
            
    サーチ…
備考
パンダの公式ドキュメントには、ファイルへの読み書きに関連する機能のリストと、いくつかの例と一般的なパラメータと、 IO Toolsに関するページが含まれています。
csvファイルをDataFrameに読み込む
 data_file.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_colindex_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.32parse_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列
0と1を日付として解析するコード: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が自動的に解析するようになります
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 。 
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'])
 差分の区切り文字は '、' - それを変更する:
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はパーサー関数です。 
1つのDFに複数のCSVファイルを読み込み、同じ構造でマージする
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ファイルをpandasデータフレームに読み込む
ファイルにヘッダー行が含まれていない場合は、
ファイル:
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のアクセスログを読む(複数の引用符)
複数引用符の場合は、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
                )