python pandasデータロード、ストレージ、ファイルフォーマット


データのロード、保存、ファイル形式pandasには、テーブル型データをDataFrameオブジェクトとして読み込むための関数がいくつか用意されています.ここでread_csvとread_talbeで最も多く使われているpandasの解析関数:関数説明read_csvファイル、URL、ファイル型オブジェクトから区切り記号付きデータをロードします.デフォルトの区切り記号はカンマread_です.tableは、ファイル、URL、ファイル型オブジェクトから区切り文字付きデータをロードします.デフォルトの区切り記号はタブ(t)ですread_fwfは、定幅列フォーマットデータ(すなわち、区切り記号なし)read_を読み出すclipboardはクリップボードのデータを読み出し、read_と見なすことができます.tableのクリップボード版.Webページを表に変換するときに便利です
pandasコードのパフォーマンスの向上:https://python.freelycode.com/contribution/detail/1083これらの関数がテキストデータをDataFrameに変換する際に用いられる技術について説明します.これらの関数のオプションは、(1)インデックス:1つまたは複数のカラムを返すDataFrame処理とし、ファイル、ユーザからカラム名を取得するかどうか(2)タイプ推定およびデータ変換:ユーザ定義値の変換、欠落値タグリストなどを含む.(タイプ推定はこれらの関数の中で最も重要な機能の一つである)(3)日付解析:複数の列に分散した日付時間情報を結果の単一の列に組み合わせるなどの組合せ機能を含む.(4)反復:大きなファイルをブロック単位で反復することをサポートします.
(5)データを整理しない問題:行、フッター、コメント、または他の重要でないもの(例えば、何千ものカンマで区切られた数値データ)をスキップする
1.読み書きテキスト形式のデータ:
 
(1)          ,        read_csv      DataFrame:
import pandas as pd
import numpy as np
#'ex1.csv'     :
# a,b,c,d,message
# 1,2,3,4,hello
# 5,6,7,8,world
# 9,10,11,12,foo
df=pd.read_csv('ex1.csv')
print df
#      :
#    a   b   c   d message
# 0  1   2   3   4   hello
# 1  5   6   7   8   world
# 2  9  10  11  12     foo
(2)      read_table,            :
df=pd.read_table('ex1.csv',sep=',')
print df
#      :
#    a   b   c   d message
# 0  1   2   3   4   hello
# 1  5   6   7   8   world
# 2  9  10  11  12     foo
(3)       pandas         ,         :
print pd.read_csv('ex1.csv',header=None)
#      :
#    0   1   2   3        4
# 0  a   b   c   d  message
# 1  1   2   3   4    hello
# 2  5   6   7   8    world
# 3  9  10  11  12      foo
print pd.read_csv('ex1.csv',names=['a','b','c','d','message'])
#      :
#    a   b   c   d  message
# 0  a   b   c   d  message
# 1  1   2   3   4    hello
# 2  5   6   7   8    world
# 3  9  10  11  12      foo
(4)     message   DataFrame   ,               4    ,     index_col    "message"
names=['a','b','c','d','message']
print pd.read_csv('ex1.csv',names=names)
#      :
#    a   b   c   d  message
# 0  a   b   c   d  message
# 1  1   2   3   4    hello
# 2  5   6   7   8    world
# 3  9  10  11  12      foo
print pd.read_csv('ex1.csv',names=names,index_col='message')
#      :
#          a   b   c   d
# message
# message  a   b   c   d
# hello    1   2   3   4
# world    5   6   7   8
# foo      9  10  11  12
(5)                 ,                  :
#'csv_mindex.csv'     :
# key1,key2,value1,value2
# one,a,1,2
# one,b,3,4
# one,c,5,6
# one,d,7,8
# two,a,9,10
# two,b,11,12
# two,c,13,14
# two,d,15,16
parsed=pd.read_csv('csv_mindex.csv',index_col=['key1','key2']) #index_col      
print parsed
#            value1  value2
# key1 key2
# one  a          1       2
#      b          3       4
#      c          5       6
#      d          7       8
# two  a          9      10
#      b         11      12
#      c         13      14
#      d         15      16
(6)                     (           )。      ,              read_table
#     。        
#'ex3.txt'     
#         A        B       C,
# aaa -0.264438 -1.026059 -0.619500
# bbb 0.9283898 0.3928928 -0.032388
# ccc -0.264327 -0.386313 -0.217601
# ddd -0.878218 -0.348238 1.1004919
print list(open('ex3.txt'))
#      :
# ['        A        B       C,
', # 'aaa -0.264438 -1.026059 -0.619500
', # 'bbb 0.9283898 0.3928928 -0.032388
', # 'ccc -0.264327 -0.386313 -0.217601
', # 'ddd -0.878218 -0.348238 1.1004919'] # , \s+ : # :\s ,\S ,+ 。 \s+ result=pd.read_table('ex3.txt',sep='\s+') print result # : # A B C, # aaa -0.264438 -1.026059 -0.619500 # bbb 0.928390 0.392893 -0.032388 # ccc -0.264327 -0.386313 -0.217601 # ddd -0.878218 -0.348238 1.100492 # : ( A,B,C , 4 ), read_table DataFrame 。
(7)skiprows        ,                 
#'ex4.csv'     :
##hey!
# a,b,c,d,message
# #just wanted to make thins more difficult for u
# # who reads CSV files with computers,anyway?
# 1,2,3,4,hello
# 5,6,7,8,world
# 9,10,11,12,foo
print pd.read_csv('ex4.txt',skiprows=[0,2,3])
#      :
#    a   b   c   d message
# 0  1   2   3   4   hello
# 1  5   6   7   8   world
# 2  9  10  11  12     foo
(8)                      。           (    ),          。
#     ,pandas                , NA,-1.#IND  NULL 。
#'ex5.csv'     :
# something,a,b,c,d,message
# one,1,2,3,4,NA
# two,5,6,,8,world
# three,9,10,11,12,foo
result=pd.read_csv('ex5.csv')
print result
#      :
#   something  a   b     c   d message
# 0       one  1   2   3.0   4     NaN
# 1       two  5   6   NaN   8   world
# 2     three  9  10  11.0  12     foo
print pd.isnull(result)  #      
#      :
#    something      a      b      c      d  message
# 0      False  False  False  False  False     True
# 1      False  False  False   True  False    False
# 2      False  False  False  False  False    False
(9) na_values                 :
result=pd.read_csv('ex5.csv',na_values=['NULL'])
print result
#      :
#   something  a   b     c   d message
# 0       one  1   2   3.0   4     NaN
# 1       two  5   6   NaN   8   world
# 2     three  9  10  11.0  12     foo
(10)                NA   
sentinels={'message':['foo','NA'],'something':['two']}  # message   foo  NA,something two   NA
print pd.read_csv('ex5.csv',na_values=sentinels)
#      :
#   something  a   b     c   d message
# 0       one  1   2   3.0   4     NaN
# 1       NaN  5   6   NaN   8   world
# 2     three  9  10  11.0  12     NaN

read_csv/read_table関数のパラメータ:
  				  
path			        、url、         
sep delimiter	                      
header			       。   0(   ),    header       None
index_col		            。       /       /       (     )
names			         ,  header=None
skiprows		       (        ),          ( 0  )
na_values		      NA  
comment			                 (     )
parse_dates		          ,   False.   True,        。  ,            
				     。             ,                    (  ,  /  
				        )
keep_date_col	          ,         。   False.
converters		   /                 。  ,{‘foo’:f}  foo         f
dayfirst		          ,        (  :7/6/2012->June,7,2012).   False
date_parser		         
nrows			       (        )
iterator		    TextParser        
chunksize		      (    )
skip_footer		       (        )
verbose			           ,  “           ” 
encoding		  unicode       。
squeeze			            ,   Series
thousands		      , “,” “。”

ブロック単位でテキストファイルを読み込みます.
大きなファイルを処理する場合、または大きなファイルのパラメータセットを見つけて後続の処理を容易にする場合は、ファイルの一部を読み込むか、ブロックごとにファイルを反復したいだけです.
import pandas as pd
import numpy as np
from pandas import Series,DataFrame


#'ex6.csv'     :
# 
# Int64Index:10000 entries, 0 to 9999
# Data columns:
# one     10000    non-null       values
# two     10000    non-null       values
# three     10000    non-null       values
# four     10000    non-null       values
# key     10000    non-null       values
# dtypes: float64(4),object(1)
print pd.read_csv('ex6.csv',nrows=5)  #nrows=5  6 ,   0  

#       ,    chunksize(  )
chunker=pd.read_csv('ex6.csv',chunksize=1000)
print chunker
#      :
# 

#read_csv      TextParser        chunksize         。   :
#        ex6.csv,       "key"  。
tot=Series([])
for piece in chunker:
    tot=tot.add(piece['key'].value_counts(),fill_value=0) #value_counts    ,fill_value     0
tot=tot.order(ascending=False) #   Series   order,    sort_value
# tot=tot.sort_value(ascending=False)
print tot  # key  

 
テキスト形式にデータを書きます.
 
                
data=pd.read_csv('ex5.csv')
#      :
print data
#      :
#   something  a   b     c   d message
# 0       one  1   2   3.0   4     NaN
# 1       two  5   6   NaN   8   world
# 2     three  9  10  11.0  12     foo
DataFrame to_csv  :
(1)    :to_csv,  DataFrame to_csv  ,                    
 
print data.to_csv('out.csv')
#out.csv     :
# ,something,a,b,c,d,message
# 0,one,1,2,3.0,4,
# 1,two,5,6,,8,world
# 2,three,9,10,11.0,12,foo
(2)            (        sys.stdout   ,              )
print data.to_csv(sys.stdout,sep='|')
#      :
# None
# |something|a|b|c|d|message
# 0|one|1|2|3.0|4|
# 1|two|5|6||8|world
# 2|three|9|10|11.0|12|foo
# None
(3)                  ,              na_sep='NULL'
print data.to_csv(sys.stdout,na_rep='NULL')
#      :
# ,something,a,b,c,d,message
# 0,one,1,2,3.0,4,NULL
# 1,two,5,6,NULL,8,world
# 2,three,9,10,11.0,12,foo
# None
(4)          ,          。  ,         :index=False,header=False
print data.to_csv(sys.stdout,index=False,header=False) #   index,   header
#      :
# one,1,2,3.0,4,
# two,5,6,,8,world
# three,9,10,11.0,12,foo
# None
(5)           ,          :index=False,columns=[]
print data.to_csv(sys.stdout,index=False,columns=['a','b','c'])
#      :
# a,b,c
# 1,2,3.0
# 5,6,
# 9,10,11.0
# None
Series to_csv  :
 
(1)Series to_csv  , Series   .csv   
dates=pd.date_range('1/1/2000',periods=7) #date_range        ,periods=7      7     , 2000/1/1  
print dates
#      :
# DatetimeIndex(['2000-01-01', '2000-01-02', '2000-01-03', '2000-01-04',
#                '2000-01-05', '2000-01-06', '2000-01-07'],
#               dtype='datetime64[ns]', freq='D')
ts=Series(np.arange(7),index=dates) #index    dates
ts.to_csv('tseries.csv')
#tseries.csv     :
# 2000-01-01,0
# 2000-01-02,1
# 2000-01-03,2
# 2000-01-04,3
# 2000-01-05,4
# 2000-01-06,5
# 2000-01-07,6
(2)read_csv    csv     Series(Series.read_csv, DataFrame  pd.read_csv),          from_csv  
print Series.from_csv('tseries.csv',parse_dates=True)
#      :
# 2000-01-01    0
# 2000-01-02    1
# 2000-01-03    2
# 2000-01-04    3
# 2000-01-05    4
# 2000-01-06    5
# 2000-01-07    6
# dtype: int64

from_csvとread_csvのパラメータは以下のように整理されています.
 
pandas.read_csv    
 
  CSV(    )   DataFrame
               
      :http://pandas.pydata.org/pandas-docs/stable/io.html
  :
filepath_or_buffer : str,pathlib。str, pathlib.Path, py._path.local.LocalPath or any object with a read() method (such as a file handle or StringIO)
   URL,  URL    :http, ftp, s3   。          
        :://localhost/path/to/table.csv
 
sep : str, default ‘,’
     。       ,          。             ‘\s+’,   python      。          。       :'\r\t'
 
delimiter : str, default None
   ,     (       , sep    )
 
delim_whitespace : boolean, default False.
    (  ’ ‘  ’ ‘)         ,     sep='\s+'。         Ture  delimiter     。
    0.18.1  
 
header : int or list of ints, default ‘infer’
          ,      。         ,    0,     None。      header=0            。header       list  :[0,1,3],  list               (           ),           (      2;      1,2,4           , 3       ,dataframe     5   。)。
  :  skip_blank_lines=True   header          ,  header=0                。
 
names : array-like, default None
         ,             ,     header=None。           ,      mangle_dupe_cols=True。
 
index_col : int or sequence or False, default None
             ,               。
       ,      ,     index_col=False    pandas           。
 
usecols : array-like, default None
        ,                   (           )             。  :usecols        [0,1,2]    [‘foo’, ‘bar’, ‘baz’]。                     。
 
as_recarray : boolean, default False
     :           。   pd.read_csv(...).to_records()  。
    Numpy recarray   DataFrame。        True。    squeeze    。          ,        。
 
squeeze : boolean, default False
         ,     Series
 
prefix : str, default None
       ,      。  :  ‘X’    X0, X1, ...
 
mangle_dupe_cols : boolean, default True
    , ‘X’...’X’   ‘X.0’...’X.N’。     false          。
 
dtype : Type name or dict of column -> type, default None
         。   {‘a’: np.float64, ‘b’: np.int32}
 
engine : {‘c’, ‘python’}, optional
Parser engine to use. The C engine is faster while the python engine is currently more feature-complete.
       。    C   python。C     Python        。
 
converters : dict, default None
        。key           。
 
true_values : list, default None
Values to consider as True
 
false_values : list, default None
Values to consider as False
 
skipinitialspace : boolean, default False
         (   False,    ).
 
skiprows : list-like or integer, default None
       (        ),          ( 0  )。
 
skipfooter : int, default 0
         。 (c     )
 
skip_footer : int, default 0
     :    skipfooter ,    。
 
nrows : int, default None
       (        )。
 
na_values : scalar, str, list-like, or dict, default None
      NA/NaN  。    ,          。   ‘1.#IND’, ‘1.#QNAN’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘nan’`.
 
keep_default_na : bool, default True
    na_values  ,  keep_default_na=False,     NaN    ,    。
 
na_filter : boolean, default True
       (         )。               ,  na_filter=False        。
 
verbose : boolean, default False
              ,  :“           ” 。
 
skip_blank_lines : boolean, default True
   True,     ;    NaN。
 
parse_dates : boolean or list of ints or names or list of lists or dict, default False
boolean. True ->     
list of ints or names. e.g. If [1, 2, 3] ->   1,2,3           ;
list of lists. e.g. If [[1, 3]] ->   1,3          
dict, e.g. {‘foo’ : [1, 3]} ->  1,3   ,          "foo"
 
infer_datetime_format : boolean, default False
     True  parse_dates   ,  pandas          ,      ,       。        5~10 。
 
keep_date_col : boolean, default False
          ,         。   False。
 
date_parser : function, default None
         ,    dateutil.parser.parser    。Pandas             ,              。
1.        arrays( parse_dates  )    ;
2.                  ;
3.      date_parser              ( parse_dates  )    。
 
dayfirst : boolean, default False
DD/MM       
 
iterator : boolean, default False
    TextFileReader   ,        。
 
chunksize : int, default None
      , See IO Tools docs for more informationon iterator and chunksize.
 
compression : {‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, None}, default ‘infer’
            。    infer  ,    gzip, bz2, zip         ‘.gz’, ‘.bz2’, ‘.zip’, or ‘xz’        ,     。    zip,  ZIP            。   None    。
   0.18.1    zip xz  
 
thousands : str, default None
      , “,”  “."
 
decimal : str, default ‘.’
        (  :      ’,‘).
 
float_precision : string, default None
Specifies which converter the C engine should use for floating-point values. The options are None for the ordinary converter, high for the high-precision converter, and round_trip for the round-trip converter.
  
 
lineterminator : str (length 1), default None
    ,  C      。
 
quotechar : str (length 1), optional
  ,            ,           。
 
quoting : int or csv.QUOTE_* instance, default 0
  csv      。   QUOTE_MINIMAL (0), QUOTE_ALL (1), QUOTE_NONNUMERIC (2) or QUOTE_NONE (3)
 
doublequote : boolean, default True
   ,         ,  quoting     QUOTE_NONE   ,                     。
 
escapechar : str (length 1), default None
 quoting  QUOTE_NONE ,               。
 
comment : str, default None
           。          ,         。           ,  (  skip_blank_lines=True)    header skiprows    。      comment='#'   ‘#empty
a,b,c
1,2,3’ header=0 ’a,b,c' header。 encoding : str, default None , 'utf-8'. List of Python standard encodings dialect : str or csv.Dialect instance, default None , sep 。 csv.Dialect tupleize_cols : boolean, default False Leave a list of tuples on columns as is (default is to convert to a Multi Index on the columns) error_bad_lines : boolean, default True , DataFrame , false, ( C )。 warn_bad_lines : boolean, default True error_bad_lines =False, warn_bad_lines =True “bad lines” ( C )。 low_memory : boolean, default True , 。 。 False。 dtype 。 chunksize iterator Dataframe, ( C ) buffer_lines : int, default None , , compact_ints : boolean, default False , compact_ints=True , , use_unsigned use_unsigned : boolean, default False : (i.e. compact_ints=True), 。 memory_map : boolean, default False , map 。 IO 。

 
手動処理セパレータフォーマット:csv python内蔵関数使用
                  pandas.read_table    。            。
               read_table          。
            ,      python   csv  。                  csv.reader
import csv
f=open('ex7.csv')
reader=csv.reader(f)
print reader
#         :<_csv.reader object="" at="">
for line in reader:
    print line
#   reader               
#      :
# ['a', 'b', 'c']
# ['1', '2', '3']
# ['1', '2', '3', '4']
lines=list(csv.reader(open('ex7.csv')))
print lines
#      :
# [['a', 'b', 'c'], ['1', '2', '3'], ['1', '2', '3', '4']]
print lines[0],lines[1]
header,values=lines[0],lines[1:]
print zip(*values) #zip(iterable),                 。a=[1,2,3] b=[2,4,5] zip(a,b)=[(1,2),(2,4),(3,5)]
#      :
# [('1', '1'), ('2', '2'), ('3', '3')]
data_dict={h:v for h, v in zip(header,zip(*values))}
print data_dict
#      :        ,    
# {'a': ('1', '1'), 'c': ('3', '3'), 'b': ('2', '2')}
CSV        。    csv.Dialect             (       、       、     )
class my_dialect(csv.Dialect):
    lineterminator = '
' delimiter = ';' quotechar = '"' quoting = 0 reader=csv.reader(f,dialect=my_dialect) print reader # : # <_csv.reader object="" at=""> with open('mydata.csv','w')as f: writer=csv.writer(f,dialect=my_dialect) writer.writerow(('one','two','three')) writer.writerow(('1','2','3')) writer.writerow(('1', '2', '3')) # mydata.csv : # one;two;three # 1;2;3 # 1;2;3

 
各csv文のパラメータは、キーワードの形式でcsvに提供することもできる.reader、サブクラスを定義する必要はありません:
 
reader=csv.reader(f,delimiter='|')

csv.writerは、自分で開いて書くことができるファイルオブジェクトとcsvを受け入れるセパレータファイルを手動で出力するために使用する.readerと同じ文とオプション:
#csv.writer     write  ,   writerow  ,       ,       
headers = ['Symbol', 'Price', 'Date', 'Time', 'Change', 'Volume']
rows = [{'Symbol':'AA', 'Price':39.48, 'Date':'6/11/2007',
        'Time':'9:36am', 'Change':-0.18, 'Volume':181800},
        {'Symbol':'AIG', 'Price': 71.38, 'Date':'6/11/2007',
        'Time':'9:36am', 'Change':-0.15, 'Volume': 195500},
        {'Symbol':'AXP', 'Price': 62.58, 'Date':'6/11/2007',
        'Time':'9:36am', 'Change':-0.46, 'Volume': 935000},
        ]
with open('stock.csv','w') as f:
    writer=csv.DictWriter(f,headers)
    writer.writeheader()
    writer.writerows(rows)
#stock.csv     :
# Symbol,Price,Date,Time,Change,Volume
# AA,39.48,6/11/2007,9:36am,-0.18,181800
# AIG,71.38,6/11/2007,9:36am,-0.15,195500
# AXP,62.58,6/11/2007,9:36am,-0.46,935000
csv             ,             ,             ,         :
#      csv              :
col_types=[str,float,str,str,float,int]
with open('stock.csv') as f:
    f_csv=csv.reader(f)
    headers=next(f_csv)
    print headers
    #      
    # ['Symbol', 'Price', 'Date', 'Time', 'Change', 'Volume']
    for row in f_csv:
        rows=tuple(convert(value) for convert,value in zip(col_types,row))
        print rows
#      :
# ('AA', 39.48, '6/11/2007', '9:36am', -0.18, 181800)
# ('AIG', 71.38, '6/11/2007', '9:36am', -0.15, 195500)
# ('AXP', 62.58, '6/11/2007', '9:36am', -0.46, 935000)
#                 :
field_types = [ ('Price', float),
                ('Change', float),
                ('Volume', int) ]
with open('stock.csv') as f:
    for row in csv.DictReader(f): #row      
        print row
        row.update((key,coversion(row[key]))
                   for key,coversion in field_types)
        #key:price conversion:float,row.update(key)  key row   , conversion(row[key])  ,
        # row[key]    key value 
        print row
#    :       print row  ,          print row   
# {'Symbol': 'AA', 'Volume': '181800', 'Time': '9:36am', 'Date': '6/11/2007', 'Price': '39.48', 'Change': '-0.18'}
# {'Symbol': 'AA', 'Volume': 181800, 'Time': '9:36am', 'Date': '6/11/2007', 'Price': 39.48, 'Change': -0.18}
csv       :
                 
delimiter	                 。   “,”
lineterminator	          ,   “\r
” quotechar ( ) 。 “"” quoting 。 csv.quote_all( ), csv.quote_minimal( ) quote_minimal skipinitialspace 。 False doublequote 。 True, 。 escapechar 。

まとめ:
 
 (1)                     ,csv        。      ,       split          re.split
            。
(2)  ,     CSV                ,
         Pandas  。Pandas               pandas.read_csv() ,
     CSV      DataFrame     。                      、               

 
json形式の読み取りと書き込み:
jsonを通してloadsはjson文字列をpython形式に変換し、ディスクから読み出すことができます.
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import sys
import json
obj="""
{"name":"Wes",
"places_lived":["United States","Spain","Germany"],
"pet":null,
"siblings":[{"name":"Scott","age":25,"pet":"Zuko"},
                {"name":"Katie","age":33,"pet":"Cisco"}]
                }
"""
result=json.loads(obj)
print result
#      :
{u'pet': None, u'siblings':
    [{u'pet': u'Zuko', u'age': 25, u'name': u'Scott'},
     {u'pet': u'Cisco', u'age': 33, u'name': u'Katie'}],
 u'name': u'Wes', u'places_lived': [u'United States', u'Spain', u'Germany']}
  json.dumps  python     JSON  。   
asjson=json.dumps(result)
print asjson  #        result   json  
 (     )json     DataFrame                  。
         : DataFrame       Json  ,          (         ,       )
siblings=DataFrame(result['siblings'],columns=['name','age']) #  result  'siblings',   name,age  
print siblings
#       :
#     name  age
# 0  Scott   25
# 1  Katie   33

 
XMLとHTML:Web情報収集
pythonにはHTMLやxml形式のデータを読み書きできるライブラリがたくさんあります.lxmlはその1つであり,大きなものを効率的に解析することができる.lxmlには複数のプログラミングインタフェースがあります.まずlxmlを使います.htmlはHTMLを処理し、lxmlを用いる.objectifyはXML処理をします.
HTMLファイル処理:
 
          HTML            ,                ( Json、HTML XML)    
(1)  ,          URL,  urllib2    ,   lxml        。
 
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import sys
import json

from urllib2 import urlopen
from lxml.html import parse
from lxml import objectify
parsed=parse(urlopen('http://finance.yahoo.com/q/op?s=AAPL+Options'))
doc=parsed.getroot() #                 HTML  (tag)
#  HTML     a   ,   findall  
links=doc.findall('.//a')  #    a     ,       
print links[15:20]
#      :    Html    
# [,
# ,
# ,
# ,
# ]
(2)   URL     ,        get  (  URL) text_content  (      )
lnk=links[15]
print lnk #       28 a       
print lnk.get('href') # get     "href" URL
#      :/quote/AAPL180601P00145000?p=AAPL180601P00145000
print lnk.text_content()
#      :AAPL180601P00145000
#                    URL
urls=[lnk.get('href') for lnk in doc.findall('.//a')]
print urls
#      :
# ['https://finance.yahoo.com/', '#Navigation', '#market-summary', '#Main', '#Aside',
#  'https://mail.yahoo.com/?.intl=us&.lang=en-US&.partner=none&.src=finance', '/quote/AAPL?p=AAPL',
#  '/quote/AAPL/key-statistics?p=AAPL', '/quote/AAPL/profile?p=AAPL', '/quote/AAPL/financials?p=AAPL',]
(3)  :          ,              id  。                    。
         。tr      ,th     ,td     
 
tables=doc.findall('.//table')
print tables
#      :     
# [, ]
calls=tables[0]
print calls #      

#         。tr      ,th     ,td     
#      
rows=calls.findall('.//tr')
print rows #    :         
#     :                   
def _unpack(row,kind='td'):
    elts=row.findall('.//%s' % kind)
    return [val.text_content() for val in elts]
print _unpack(rows[1]) #           
#      : rows[1]  2    
# ['AAPL180608C00130000', '2018-05-04 11:45PM EDT', '130.00', '36.90', '53.40', '54.70', '0.00', '-', '1', '1', '0.00%']
print _unpack(rows[1],kind='th') #        ,     
#    :['Strike','Symbol','Last','Chg','Bid','Ask']
 
(4)         ,        DataFrame。               ,                  。
           ,  pandas    TextParser         (read_csv                 )
from pandas.io.parsers import TextParser
def parse_option_data(table):
    rows=table.findall('.//tr')
    header=_unpack(rows[0],kind='th')
    data=[_unpack(r) for r in rows[1:]]
    return TextParser(data,names=header).get_chunk()

aa=parse_option_data(table=tables)
print DataFrame(aa)

lxmlを利用する.objectify解析xml:具体的には、xml解析ファイルを紹介する別の記事を参照してください.
aa.xmlの内容は次のとおりです.


    
        1181251680
        040000008200E000
        1181572063
        
        
        1800
        Bring pizza home
    
    
        1234360800
        1800
        Check MS Office website for updates
        
        604f4792-eb89-478b-a14f-dd34d3cc6c21-1234360800
        dismissed
  
def parseXML(xmlFile):
    """
    Parse the xml
    :param xmlFile:
    :return:
    """
    f=open(xmlFile) #1.     
    xml=f.read() #2.      
    f.close()

    tree=etree.parse(StringIO(xml)) #3. etree.parse  xml      
    context=etree.iterparse(StringIO(xml)) #4.etree.iterparse    xml     
    for action,elem in context:
        if not elem.text:
            text="None"
        else:
            text=elem.text
        print elem.tag+"=>"+text
if __name__=="__main__":
    parseXML("aa.xml")
def parseXML(xmlFile):
    """
    Parse the xml
    :param xmlFile:
    :return:
    """
    f=open(xmlFile)
    xml=f.read()
    f.close()

    tree=etree.parse(StringIO(xml))
    context=etree.iterparse(StringIO(xml))
    for action,elem in context:
        if not elem.text:
            text="None"
        else:
            text=elem.text
        print elem.tag+"=>"+text
if __name__=="__main__":
    parseXML("aa.xml")
#      :
# begin = > 1181251680
# uid = > 040000008200E000
# alarmTime = > 1181572063
# state = > None
# location = > None
# duration = > 1800
# subject = > Bring
# pizza
# home
# appointment = >
# 
# begin = > 1234360800
# duration = > 1800
# subject = > Check
# MS
# Office
# website
# for updates
#     location = > None
# uid = > 604
# f4792 - eb89 - 478
# b - a14f - dd34d3cc6c21 - 1234360800
# state = > dismissed
# appointment = >
# 
# zAppointments = >

2.バイナリデータフォーマット:書き込みと読み取り
(1)  python   pickle          

データのバイナリフォーマットストレージを実現する最も簡単な方法の1つはpython内蔵pickleシーケンス化を使用することです.使いやすいようにpandasオブジェクトにはpickle形式でディスクにデータを保存するためのto_があります.pickleメソッド.
逆に、read_をディスクから読み込むpickle.
import pandas as pd
import numpy as np
from pandas import Series,DataFrame


#         
frame=pd.read_csv('ex1.csv')
print frame
#      :
#    a   b   c   d message
# 0  1   2   3   4   hello
# 1  5   6   7   8   world
# 2  9  10  11  12     foo

(1)  to_pickle     
frame.to_pickle('frame_pickle')

(2)         pickle  pandas.load      python,load    ,   read_pickle    
# pd.load('frame_pickle') #load      ,   read_pickle
print pd.read_pickle('frame_pickle')

警告:pickleは短期ストレージフォーマットのみを推奨します.その理由は、フォーマットが永遠に安定していることを保証することが難しいからです.
今日のpickleのオブジェクトは、後続のバージョンのライブラリunpickleには出られません.
 
(2)  HDF5                        。

HDF 5は多種類の圧縮器の即時圧縮をサポートし、重複モードデータをより効率的に記憶することができ、メモリに直接入れられない非常に大きなデータセットに対して、
HDF 5は、ブロック読み書きを効率的に分割できるので、良い選択です.
pythonのHDF 5ライブラリには2つのインタフェース(PyTableとh 5 py)があり、h 5 pyは直接的で高度なHDF 5 APIアクセスインタフェースを提供しています.
一方、PyTableはHDF 5の多くの詳細を抽象化し、柔軟なデータコンテナ、テーブルインデックス、クエリー機能、およびコア外コンピューティング技術のいくつかのサポートを提供しています.
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
import tables

#         
frame=pd.read_csv('ex1.csv')
print frame
#      :
#    a   b   c   d message
# 0  1   2   3   4   hello
# 1  5   6   7   8   world
# 2  9  10  11  12     foo

#          
random_state = np.random.RandomState(1999)

def make_random_cluster_points(n_samples, random_state=random_state):
    mu_options = np.array([(-1, -1), (1, 1), (1, -1), (-1, 1)])
    sigma = 0.2
    mu_choices = random_state.randint(0, len(mu_options), size=n_samples)
    means = mu_options[mu_choices]
    return means + np.random.randn(n_samples, 2) * sigma, mu_choices

def plot_clusters(data, clusters, name):
    plt.figure()
    colors = ["#9b59b6", "#3498db", "#e74c3c", "#2ecc71"]
    for i in np.unique(clusters):
        plt.scatter(data[clusters==i, 0], data[clusters==i, 1], color=colors[i])
    plt.axis('off')
    plt.title('Plot from %s' % name)

#(1)       :open_file(   ,'w'),create_array()
data, clusters = make_random_cluster_points(10000)
plot_clusters(data, clusters, "data in memory")
# plt.show() #    
#PyTables       
sample_data,sample_clusters=make_random_cluster_points(10000)  #        
hdf5_path="my_data.hdf5" #      
hdf5_file=tables.open_file(hdf5_path,mode='w')
data_storage=hdf5_file.create_array(hdf5_file.root,'data',sample_data)
#hdf5_file.root "/",data   array      "/data",data     sample_data   .data    
clusters_storage=hdf5_file.create_array(hdf5_file.root,'clusters',sample_clusters)
hdf5_file.close()

#(2)     :open_file(   ,'r'),hdf5_file.root.data[:]
hdf5_path="my_data.hdf5"
read_hdf5_file=tables.open_file(hdf5_path,mode='r')
hdf5_data=read_hdf5_file.root.data[:] #  read_hdf5_file          data     
hdf5_clusters=read_hdf5_file.root.clusters[:] #  read_hdf5_file          clusters     
read_hdf5_file.close()

plot_clusters(hdf5_data,hdf5_clusters,"PyTables Array")
plt.show()

注意:HDF 5はデータベースではありません.「1回の書き込み複数回の読み取り」のデータセットとして最適です.データはいつでもファイルに追加できますが、複数の書き込み操作が同時に発生すると、ファイルが破壊される可能性があります.
 
(3)  Microsoft Excel  
pandas ExcelFile        Excel      。  ExcelFile   (python  excel    )xlrd
 openpyxl ,          。
#   excel  :
xls_file=pd.ExcelFile('data.xls')
#                parse   DataFrame 
table=xls_file.parse('Sheet1')

3.HTMLとWeb API:requestパッケージのgetを使用してデータを読み込む
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
import tables

import requests
import json

# url='https://twitter.com/search?q=python+pandas'
url='https://twitter.com/search?q=python%20pandas&src=typd'
resp=requests.get(url)
print resp.text


data=json.loads(resp.text) # resp   json  
print data
print data.keys()

#            tweet  ,   results    DataFrame:
tweet_fields=['created_at','from_user','id','text']
tweets=DataFrame(data['result'],columns=tweet_fields)
print tweets.ix[7]

4.データベースの使用
 
sqlite3   :       
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import matplotlib.pyplot as plt
import tables

import requests
import json
import sqlite3

(1)    
query="""
CREATE TABLE test
(a VARCHAR (20),b VARCHAR (20),
c REAL, d INTEGER );

"""
con=sqlite3.connect(':memory:')
con.execute(query)
con.commit()

(2)    
data=[('Atlanta','Georgia',1.25,6),
      ('Tallahassee','Florida',2.6,3),
      ('Sacramento','California',1.7,5)]
stmt='INSERT INTO test VALUES(?,?,?,?)'
con.executemany(stmt,data)
con.commit()
#    ,        
cursor=con.execute('select * from test')
rows=cursor.fetchall()
print rows
#      :sqlite3      
[(u'Atlanta', u'Georgia', 1.25, 6),
 (u'Tallahassee', u'Florida', 2.6, 3),
 (u'Sacramento', u'California', 1.7, 5)]

(3)           DataFrame    ,      (     description   )
print cursor.description
#      :
(('a', None, None, None, None, None, None),
 ('b', None, None, None, None, None, None),
 ('c', None, None, None, None, None, None),
 ('d', None, None, None, None, None, None))
(4)   DataFrame
result=DataFrame(rows,columns=zip(*cursor.description)[0])
print result
#      :
#              a           b     c  d
# 0      Atlanta     Georgia  1.25  6
# 1  Tallahassee     Florida  2.60  3
# 2   Sacramento  California  1.70  5

(5)              ,pandas           read_sql  (  pandas.io.sql  )。
#     select         。
import pandas.io.sql as sql
# print sql.read_sql('select * from test',con)
#     pd.read_sql     sql    
df= pd.read_sql('select * from test',con)
#      :
#              a           b     c  d
# 0      Atlanta     Georgia  1.25  6
# 1  Tallahassee     Florida  2.60  3
# 2   Sacramento  California  1.70  5
aa=DataFrame(df)
print aa
mysql   :       
#  mysql    
import pymysql
import configparser
config =configparser
(1)     
db=pymysql.connect("localhost","root",
                 "root","imooc")
cursor=db.cursor() #            

(2)  execute()    sql  
cursor.execute("select * from test1")
data=cursor.fetchall()
print data
#      :4   ,mysql        
# ((1, 'tang seng', 79, 'xi tian qu jing', '11783213,131313133,78271783918'),
#  (2, 'zhu ba jie', 61, 'xi tian qu jing', '787138912,83918933'),
#  (3, 'sun wu kong', 91, 'ji tian da sheng', '1378219389,17898932183,1841898344,1989839898'),
#  (4, 'sha seng', 71, 'xi tian qu jing', '1649281938,15089328109'))
#
(3)     cursor.description ,         
print cursor.description #
#      :
# ((u'id', 3, None, 11, 11, 0, 0),
#  (u'user_name', 253, None, 20, 20, 0, 1),
#  (u'score', 3, None, 2, 2, 0, 1),
#  (u'over', 253, None, 40, 40, 0, 1),
#  (u'mobile', 253, None, 100, 100, 0, 1))
print type(zip(*cursor.description)[0])
(4) data  DataFrame ,pandas   list      DataFrame,    Data   ,     list    
result=DataFrame(list(data),columns=zip(*cursor.description)[0])
print result
#      :
#    id    user_name  score              over  \
# 0   1    tang seng     79   xi tian qu jing
# 1   2   zhu ba jie     61   xi tian qu jing
# 2   3  sun wu kong     91  ji tian da sheng
# 3   4     sha seng     71   xi tian qu jing
#
#                                          mobile
# 0                11783213,131313133,78271783918
# 1                            787138912,83918933
# 2  1378219389,17898932183,1841898344,1989839898
# 3                        1649281938,15089328109

(5)   read_sql     :
import pandas.io.sql as sql
result=sql.read_sql('select * from test1',db)
print result
#      :
#    id   user_name    score              over  \
# 0   1    tang seng     79   xi tian qu jing
# 1   2   zhu ba jie     61   xi tian qu jing
# 2   3  sun wu kong     91  ji tian da sheng
# 3   4     sha seng     71   xi tian qu jing
#
#                                          mobile
# 0                11783213,131313133,78271783918
# 1                            787138912,83918933
# 2  1378219389,17898932183,1841898344,1989839898
# 3                        1649281938,15089328109
db.close()
  :(1)DataFrame      list  :sqlit3 fetchall      ,        DataFrame ,
         mysql       ,      list.
mongoDB   :       

NoSQLデータベースにはさまざまな形式があります.単純なディクショナリキー値ペアで格納されるものもあれば、ドキュメントベースのものもあります(基本ユニットはディクショナリ型のオブジェクトです).
from pandas import Series,DataFrame
import pymongo
import datetime


# import configparser
# config =configparser
 (1)mongodb      
con=pymongo.MongoClient('localhost',port=27017)
(2)     
# tweets=con.test_database
 (3)    :       mongodb ,          
# collection=tweets.test_collection
post = {"author": "Mike",
         "text": "My first blog post!",
         "tags": ["mongodb", "python", "pymongo"],
         "date": datetime.datetime.utcnow()}
(4)    
posts=tweets.posts
post_id=posts.insert_one(post).inserted_id
(5)       
import pprint
pprint.pprint(posts.find_one({"author":"Mike"}))
(6)    DataFrame 
p=DataFrame(post,columns=post.keys())
print p