データ抽出と置換

通常のデータフレームの条件抽出とwhere,mask,loc,ilocを使う方法について説明します。


In [18]:
import pandas as pd
import pandas_datareader.data as web#株価など時系列データをwebから取得するパッケージ
from datetime import datetime

In [16]:
ticker = ['AAPL','IBM','MSFT','GOOG']
start = '2016-01-01'#datetime(2016,1,1)
end = '2016-12-31'#datetime(2016,12,31)
df = web.DataReader(ticker,'google',start,end)['Close',:,:]

In [29]:
df


Out[29]:
AMZN FB INTU
Date
2012-01-03 179.03 NaN 52.46
2012-01-04 177.51 NaN 52.30
2012-01-05 177.61 NaN 52.54
2012-01-06 182.61 NaN 53.12
2012-01-09 178.56 NaN 53.18
2012-01-10 179.34 NaN 54.75
2012-01-11 178.90 NaN 55.18
2012-01-12 175.93 NaN 55.28
2012-01-13 178.42 NaN NaN
2012-01-17 NaN NaN 55.25
2012-01-18 189.44 NaN 56.45
2012-01-19 194.45 NaN 57.10
2012-01-20 190.93 NaN 57.09
2012-01-23 186.09 NaN 57.41
2012-01-24 187.00 NaN 57.33
2012-01-25 187.80 NaN 57.52
2012-01-26 193.32 NaN 57.49
2012-01-27 NaN NaN 57.35
2012-01-30 192.15 NaN 56.56
2012-01-31 194.44 NaN 56.44
2012-02-01 179.46 NaN 57.88
2012-02-02 181.72 NaN 57.86
2012-02-03 187.68 NaN 58.47
2012-02-06 NaN NaN 57.90
2012-02-07 184.19 NaN 57.62
2012-02-08 185.48 NaN 57.56
2012-02-09 184.98 NaN 57.60
2012-02-10 185.54 NaN 56.68
2012-02-13 191.59 NaN 56.59
2012-02-14 191.30 NaN 56.77
... ... ... ...
2013-11-18 366.18 45.83 73.41
2013-11-19 364.94 46.36 73.36
2013-11-20 362.57 46.43 73.14
2013-11-21 368.92 46.70 73.16
2013-11-22 372.31 46.23 72.03
2013-11-25 376.64 44.82 72.73
2013-11-26 381.37 45.89 72.84
2013-11-27 386.71 46.49 73.54
2013-11-29 393.62 47.01 74.23
2013-12-02 392.30 47.06 74.23
2013-12-03 384.66 46.73 74.36
2013-12-04 385.96 48.62 74.34
2013-12-05 384.49 48.34 74.01
2013-12-06 386.95 47.94 74.91
2013-12-09 384.89 48.84 74.40
2013-12-10 387.78 50.24 75.00
2013-12-11 382.19 49.38 74.53
2013-12-12 381.25 51.83 74.23
2013-12-13 384.24 53.32 75.02
2013-12-16 388.97 53.81 74.86
2013-12-17 387.65 54.86 74.69
2013-12-18 395.96 55.57 75.81
2013-12-19 395.19 55.05 75.69
2013-12-20 402.20 55.12 75.28
2013-12-23 402.92 57.77 76.32
2013-12-24 399.20 NaN 76.42
2013-12-26 404.39 57.73 76.35
2013-12-27 398.08 55.44 76.09
2013-12-30 393.37 53.71 76.57
2013-12-31 398.79 54.65 76.32

502 rows × 3 columns

抽出するか取り除くか


In [64]:
list(df.columns)


Out[64]:
['AAPL', 'GOOG', 'IBM', 'MSFT']

取り除く方法


In [65]:
df_drop = df.drop(['AAPL', 'GOOG'],axis=1)#axis=0なら行を指定して取り除く。axis=1なら列を指定して取り除く。
df_drop.head(5)


Out[65]:
IBM MSFT
Date
2016-01-04 135.949997 54.799999
2016-01-05 135.850006 55.049999
2016-01-06 135.169998 54.049999
2016-01-07 132.860001 52.169998
2016-01-08 131.630005 52.330002

抽出する方法(データフレームで説明した方法)


In [66]:
df_select = df[['IBM', 'MSFT']]
df_select.head(5)


Out[66]:
IBM MSFT
Date
2016-01-04 135.949997 54.799999
2016-01-05 135.850006 55.049999
2016-01-06 135.169998 54.049999
2016-01-07 132.860001 52.169998
2016-01-08 131.630005 52.330002

条件抽出


In [67]:
df[df['AAPL'] > 100]


Out[67]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 135.949997 54.799999
2016-01-05 102.709999 742.580017 135.850006 55.049999
2016-01-06 100.699997 743.619995 135.169998 54.049999
2016-01-22 101.419998 725.250000 122.500000 52.290001
2016-03-01 100.529999 718.809998 134.369995 52.580002
2016-03-02 100.750000 718.849976 136.300003 52.950001
2016-03-03 101.500000 712.419983 137.800003 52.349998
2016-03-04 103.010002 710.890015 137.800003 52.029999
2016-03-07 101.870003 695.159973 140.149994 51.029999
2016-03-08 101.029999 693.969971 139.070007 51.650002
2016-03-09 101.120003 705.239990 140.410004 52.840000
2016-03-10 101.169998 712.820007 140.190002 52.049999
2016-03-11 102.260002 726.820007 142.360001 53.070000
2016-03-14 102.519997 730.489990 142.779999 53.169998
2016-03-15 104.580002 728.330017 142.960007 53.590000
2016-03-16 105.970001 736.090027 144.789993 54.349998
2016-03-17 105.800003 737.780029 147.039993 54.660000
2016-03-18 105.919998 737.599976 147.089996 53.490002
2016-03-21 105.910004 742.090027 148.630005 53.860001
2016-03-22 106.720001 740.750000 148.100006 54.070000
2016-03-23 106.129997 738.059998 145.399994 53.970001
2016-03-24 105.669998 735.299988 147.949997 54.209999
2016-03-28 105.190002 733.530029 148.399994 53.540001
2016-03-29 107.680000 744.770020 149.330002 54.709999
2016-03-30 109.559998 750.530029 148.410004 55.049999
2016-03-31 108.989998 744.950012 151.449997 55.230000
2016-04-01 109.989998 749.909973 152.520004 55.570000
2016-04-04 111.120003 745.289978 152.070007 55.430000
2016-04-05 109.809998 737.799988 150.000000 54.560001
2016-04-06 110.959999 745.690002 150.020004 55.119999
... ... ... ... ...
2016-11-17 109.949997 771.229980 159.800003 60.639999
2016-11-18 110.059998 760.539978 160.389999 60.349998
2016-11-21 111.730003 769.200012 162.770004 60.860001
2016-11-22 111.800003 768.270020 162.669998 61.119999
2016-11-23 111.230003 760.989990 161.979996 60.400002
2016-11-25 111.790001 761.679993 163.139999 60.529999
2016-11-28 111.570000 768.239990 164.520004 60.610001
2016-11-29 111.459999 770.840027 163.529999 61.090000
2016-11-30 110.519997 758.039978 162.220001 60.259998
2016-12-01 109.489998 747.919983 159.820007 59.200001
2016-12-02 109.900002 750.500000 160.020004 59.250000
2016-12-05 109.110001 762.520020 159.839996 60.220001
2016-12-06 109.949997 759.109985 160.350006 59.950001
2016-12-07 111.029999 771.190002 164.789993 61.369999
2016-12-08 112.120003 776.419983 165.360001 61.009998
2016-12-09 113.949997 789.289978 166.520004 61.970001
2016-12-12 113.300003 789.270020 165.500000 62.169998
2016-12-13 115.190002 796.099976 168.289993 62.980000
2016-12-14 115.190002 797.070007 168.509995 62.680000
2016-12-15 115.820000 797.849976 168.020004 62.580002
2016-12-16 115.970001 790.799988 166.729996 62.299999
2016-12-19 116.639999 794.200012 166.679993 63.619999
2016-12-20 116.949997 796.419983 167.600006 63.540001
2016-12-21 117.059998 794.559998 167.330002 63.540001
2016-12-22 116.290001 791.260010 167.059998 63.549999
2016-12-23 116.519997 789.909973 166.710007 63.240002
2016-12-27 117.260002 791.549988 167.139999 63.279999
2016-12-28 116.760002 785.049988 166.190002 62.990002
2016-12-29 116.730003 782.789978 166.600006 62.900002
2016-12-30 115.820000 771.820007 165.990005 62.139999

156 rows × 4 columns

真偽値のSeries

どのような仕組みか


In [68]:
df['AAPL'] > 100


Out[68]:
Date
2016-01-04     True
2016-01-05     True
2016-01-06     True
2016-01-07    False
2016-01-08    False
2016-01-11    False
2016-01-12    False
2016-01-13    False
2016-01-14    False
2016-01-15    False
2016-01-19    False
2016-01-20    False
2016-01-21    False
2016-01-22     True
2016-01-25    False
2016-01-26    False
2016-01-27    False
2016-01-28    False
2016-01-29    False
2016-02-01    False
2016-02-02    False
2016-02-03    False
2016-02-04    False
2016-02-05    False
2016-02-08    False
2016-02-09    False
2016-02-10    False
2016-02-11    False
2016-02-12    False
2016-02-16    False
              ...  
2016-11-17     True
2016-11-18     True
2016-11-21     True
2016-11-22     True
2016-11-23     True
2016-11-25     True
2016-11-28     True
2016-11-29     True
2016-11-30     True
2016-12-01     True
2016-12-02     True
2016-12-05     True
2016-12-06     True
2016-12-07     True
2016-12-08     True
2016-12-09     True
2016-12-12     True
2016-12-13     True
2016-12-14     True
2016-12-15     True
2016-12-16     True
2016-12-19     True
2016-12-20     True
2016-12-21     True
2016-12-22     True
2016-12-23     True
2016-12-27     True
2016-12-28     True
2016-12-29     True
2016-12-30     True
Name: AAPL, dtype: bool

真偽値DataFrame


In [69]:
df > 150


Out[69]:
AAPL GOOG IBM MSFT
Date
2016-01-04 False True False False
2016-01-05 False True False False
2016-01-06 False True False False
2016-01-07 False True False False
2016-01-08 False True False False
2016-01-11 False True False False
2016-01-12 False True False False
2016-01-13 False True False False
2016-01-14 False True False False
2016-01-15 False True False False
2016-01-19 False True False False
2016-01-20 False True False False
2016-01-21 False True False False
2016-01-22 False True False False
2016-01-25 False True False False
2016-01-26 False True False False
2016-01-27 False True False False
2016-01-28 False True False False
2016-01-29 False True False False
2016-02-01 False True False False
2016-02-02 False True False False
2016-02-03 False True False False
2016-02-04 False True False False
2016-02-05 False True False False
2016-02-08 False True False False
2016-02-09 False True False False
2016-02-10 False True False False
2016-02-11 False True False False
2016-02-12 False True False False
2016-02-16 False True False False
... ... ... ... ...
2016-11-17 False True True False
2016-11-18 False True True False
2016-11-21 False True True False
2016-11-22 False True True False
2016-11-23 False True True False
2016-11-25 False True True False
2016-11-28 False True True False
2016-11-29 False True True False
2016-11-30 False True True False
2016-12-01 False True True False
2016-12-02 False True True False
2016-12-05 False True True False
2016-12-06 False True True False
2016-12-07 False True True False
2016-12-08 False True True False
2016-12-09 False True True False
2016-12-12 False True True False
2016-12-13 False True True False
2016-12-14 False True True False
2016-12-15 False True True False
2016-12-16 False True True False
2016-12-19 False True True False
2016-12-20 False True True False
2016-12-21 False True True False
2016-12-22 False True True False
2016-12-23 False True True False
2016-12-27 False True True False
2016-12-28 False True True False
2016-12-29 False True True False
2016-12-30 False True True False

252 rows × 4 columns


In [70]:
df[df > 150]


Out[70]:
AAPL GOOG IBM MSFT
Date
2016-01-04 NaN 741.840027 NaN NaN
2016-01-05 NaN 742.580017 NaN NaN
2016-01-06 NaN 743.619995 NaN NaN
2016-01-07 NaN 726.390015 NaN NaN
2016-01-08 NaN 714.469971 NaN NaN
2016-01-11 NaN 716.030029 NaN NaN
2016-01-12 NaN 726.070007 NaN NaN
2016-01-13 NaN 700.559998 NaN NaN
2016-01-14 NaN 714.719971 NaN NaN
2016-01-15 NaN 694.450012 NaN NaN
2016-01-19 NaN 701.789978 NaN NaN
2016-01-20 NaN 698.450012 NaN NaN
2016-01-21 NaN 706.590027 NaN NaN
2016-01-22 NaN 725.250000 NaN NaN
2016-01-25 NaN 711.669983 NaN NaN
2016-01-26 NaN 713.039978 NaN NaN
2016-01-27 NaN 699.989990 NaN NaN
2016-01-28 NaN 730.960022 NaN NaN
2016-01-29 NaN 742.950012 NaN NaN
2016-02-01 NaN 752.000000 NaN NaN
2016-02-02 NaN 764.650024 NaN NaN
2016-02-03 NaN 726.950012 NaN NaN
2016-02-04 NaN 708.010010 NaN NaN
2016-02-05 NaN 683.570007 NaN NaN
2016-02-08 NaN 682.739990 NaN NaN
2016-02-09 NaN 678.109985 NaN NaN
2016-02-10 NaN 684.119995 NaN NaN
2016-02-11 NaN 683.109985 NaN NaN
2016-02-12 NaN 682.400024 NaN NaN
2016-02-16 NaN 691.000000 NaN NaN
... ... ... ... ...
2016-11-17 NaN 771.229980 159.800003 NaN
2016-11-18 NaN 760.539978 160.389999 NaN
2016-11-21 NaN 769.200012 162.770004 NaN
2016-11-22 NaN 768.270020 162.669998 NaN
2016-11-23 NaN 760.989990 161.979996 NaN
2016-11-25 NaN 761.679993 163.139999 NaN
2016-11-28 NaN 768.239990 164.520004 NaN
2016-11-29 NaN 770.840027 163.529999 NaN
2016-11-30 NaN 758.039978 162.220001 NaN
2016-12-01 NaN 747.919983 159.820007 NaN
2016-12-02 NaN 750.500000 160.020004 NaN
2016-12-05 NaN 762.520020 159.839996 NaN
2016-12-06 NaN 759.109985 160.350006 NaN
2016-12-07 NaN 771.190002 164.789993 NaN
2016-12-08 NaN 776.419983 165.360001 NaN
2016-12-09 NaN 789.289978 166.520004 NaN
2016-12-12 NaN 789.270020 165.500000 NaN
2016-12-13 NaN 796.099976 168.289993 NaN
2016-12-14 NaN 797.070007 168.509995 NaN
2016-12-15 NaN 797.849976 168.020004 NaN
2016-12-16 NaN 790.799988 166.729996 NaN
2016-12-19 NaN 794.200012 166.679993 NaN
2016-12-20 NaN 796.419983 167.600006 NaN
2016-12-21 NaN 794.559998 167.330002 NaN
2016-12-22 NaN 791.260010 167.059998 NaN
2016-12-23 NaN 789.909973 166.710007 NaN
2016-12-27 NaN 791.549988 167.139999 NaN
2016-12-28 NaN 785.049988 166.190002 NaN
2016-12-29 NaN 782.789978 166.600006 NaN
2016-12-30 NaN 771.820007 165.990005 NaN

252 rows × 4 columns

抽出に論理式も使える


In [71]:
df['AAPL']>110 & df['GOOG']>750


---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/anaconda/lib/python3.6/site-packages/pandas/core/ops.py in na_op(x, y)
    876         try:
--> 877             result = op(x, y)
    878         except TypeError:

/anaconda/lib/python3.6/site-packages/pandas/core/ops.py in <lambda>(x, y)
    124                  xor=bool_method(operator.xor, names('xor'), op('^')),
--> 125                  rand_=bool_method(lambda x, y: operator.and_(y, x),
    126                                    names('rand_'), op('&')),

TypeError: ufunc 'bitwise_and' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
/anaconda/lib/python3.6/site-packages/pandas/core/ops.py in na_op(x, y)
    894                         y = bool(y)
--> 895                     result = lib.scalar_binop(x, y, op)
    896                 except:

pandas/lib.pyx in pandas.lib.scalar_binop (pandas/lib.c:16177)()

ValueError: Buffer dtype mismatch, expected 'Python object' but got 'double'

During handling of the above exception, another exception occurred:

TypeError                                 Traceback (most recent call last)
<ipython-input-71-a8801ee86291> in <module>()
----> 1 df['AAPL']>110 & df['GOOG']>750

/anaconda/lib/python3.6/site-packages/pandas/core/ops.py in wrapper(self, other)
    927                       is_integer_dtype(np.asarray(other)) else fill_bool)
    928             return filler(self._constructor(
--> 929                 na_op(self.values, other),
    930                 index=self.index)).__finalize__(self)
    931 

/anaconda/lib/python3.6/site-packages/pandas/core/ops.py in na_op(x, y)
    897                     raise TypeError("cannot compare a dtyped [{0}] array with "
    898                                     "a scalar of type [{1}]".format(
--> 899                                         x.dtype, type(y).__name__))
    900 
    901         return result

TypeError: cannot compare a dtyped [float64] array with a scalar of type [bool]

論理演算&が先に行われるのでエラーになる。
正しい書き方


In [72]:
(df['AAPL']>110) & (df['GOOG']>700)


Out[72]:
Date
2016-01-04    False
2016-01-05    False
2016-01-06    False
2016-01-07    False
2016-01-08    False
2016-01-11    False
2016-01-12    False
2016-01-13    False
2016-01-14    False
2016-01-15    False
2016-01-19    False
2016-01-20    False
2016-01-21    False
2016-01-22    False
2016-01-25    False
2016-01-26    False
2016-01-27    False
2016-01-28    False
2016-01-29    False
2016-02-01    False
2016-02-02    False
2016-02-03    False
2016-02-04    False
2016-02-05    False
2016-02-08    False
2016-02-09    False
2016-02-10    False
2016-02-11    False
2016-02-12    False
2016-02-16    False
              ...  
2016-11-17    False
2016-11-18     True
2016-11-21     True
2016-11-22     True
2016-11-23     True
2016-11-25     True
2016-11-28     True
2016-11-29     True
2016-11-30     True
2016-12-01    False
2016-12-02    False
2016-12-05    False
2016-12-06    False
2016-12-07     True
2016-12-08     True
2016-12-09     True
2016-12-12     True
2016-12-13     True
2016-12-14     True
2016-12-15     True
2016-12-16     True
2016-12-19     True
2016-12-20     True
2016-12-21     True
2016-12-22     True
2016-12-23     True
2016-12-27     True
2016-12-28     True
2016-12-29     True
2016-12-30     True
dtype: bool

In [73]:
df[(df['AAPL']>110) & (df['GOOG']>750)]


Out[73]:
AAPL GOOG IBM MSFT
Date
2016-04-13 112.040001 751.719971 151.229996 55.349998
2016-04-14 112.099998 753.200012 151.160004 55.360001
2016-09-14 111.769997 762.489990 154.050003 56.259998
2016-09-15 115.570000 771.760010 155.660004 57.189999
2016-09-16 114.919998 768.880005 153.839996 57.250000
2016-09-19 113.580002 765.700012 154.869995 56.930000
2016-09-20 113.570000 771.409973 154.449997 56.810001
2016-09-21 113.550003 776.219971 155.529999 57.759998
2016-09-22 114.620003 787.210022 156.110001 57.820000
2016-09-23 112.709999 786.900024 154.979996 57.430000
2016-09-26 112.879997 774.210022 153.979996 56.900002
2016-09-27 113.089996 783.010010 156.770004 57.950001
2016-09-28 113.949997 781.559998 158.289993 58.029999
2016-09-29 112.180000 775.010010 158.110001 57.400002
2016-09-30 113.050003 777.289978 158.850006 57.599998
2016-10-03 112.519997 772.559998 157.610001 57.419998
2016-10-04 113.000000 776.429993 156.460007 57.240002
2016-10-05 113.050003 776.469971 157.080002 57.639999
2016-10-06 113.889999 776.859985 156.880005 57.740002
2016-10-07 114.059998 775.080017 155.669998 57.799999
2016-10-10 116.050003 785.940002 157.020004 58.040001
2016-10-11 116.300003 783.070007 154.789993 57.189999
2016-10-12 117.339996 786.140015 154.289993 57.110001
2016-10-13 116.980003 778.190002 153.720001 56.919998
2016-10-14 117.629997 778.530029 154.449997 57.419998
2016-10-17 117.550003 779.960022 154.770004 57.220001
2016-10-18 117.470001 795.260010 150.720001 57.660000
2016-10-19 117.120003 801.500000 151.259995 57.529999
2016-10-20 117.059998 796.969971 151.520004 57.250000
2016-10-21 116.599998 799.369995 149.630005 59.660000
... ... ... ... ...
2016-11-01 111.489998 783.609985 152.789993 59.799999
2016-11-02 111.589996 768.700012 151.949997 59.430000
2016-11-07 110.410004 782.520020 155.720001 60.419998
2016-11-08 111.059998 790.510010 155.169998 60.470001
2016-11-09 110.879997 785.309998 154.809998 60.169998
2016-11-18 110.059998 760.539978 160.389999 60.349998
2016-11-21 111.730003 769.200012 162.770004 60.860001
2016-11-22 111.800003 768.270020 162.669998 61.119999
2016-11-23 111.230003 760.989990 161.979996 60.400002
2016-11-25 111.790001 761.679993 163.139999 60.529999
2016-11-28 111.570000 768.239990 164.520004 60.610001
2016-11-29 111.459999 770.840027 163.529999 61.090000
2016-11-30 110.519997 758.039978 162.220001 60.259998
2016-12-07 111.029999 771.190002 164.789993 61.369999
2016-12-08 112.120003 776.419983 165.360001 61.009998
2016-12-09 113.949997 789.289978 166.520004 61.970001
2016-12-12 113.300003 789.270020 165.500000 62.169998
2016-12-13 115.190002 796.099976 168.289993 62.980000
2016-12-14 115.190002 797.070007 168.509995 62.680000
2016-12-15 115.820000 797.849976 168.020004 62.580002
2016-12-16 115.970001 790.799988 166.729996 62.299999
2016-12-19 116.639999 794.200012 166.679993 63.619999
2016-12-20 116.949997 796.419983 167.600006 63.540001
2016-12-21 117.059998 794.559998 167.330002 63.540001
2016-12-22 116.290001 791.260010 167.059998 63.549999
2016-12-23 116.519997 789.909973 166.710007 63.240002
2016-12-27 117.260002 791.549988 167.139999 63.279999
2016-12-28 116.760002 785.049988 166.190002 62.990002
2016-12-29 116.730003 782.789978 166.600006 62.900002
2016-12-30 115.820000 771.820007 165.990005 62.139999

66 rows × 4 columns

|による論理和抽出


In [74]:
df[(df['AAPL']>115) | (df['GOOG']>780)]


Out[74]:
AAPL GOOG IBM MSFT
Date
2016-08-05 107.480003 782.219971 163.500000 57.959999
2016-08-08 108.370003 781.760010 162.039993 58.060001
2016-08-09 108.809998 784.260010 161.770004 58.200001
2016-08-10 108.000000 784.679993 162.080002 58.020000
2016-08-11 107.930000 784.849976 163.529999 58.299999
2016-08-12 108.180000 783.219971 161.949997 57.939999
2016-08-15 109.480003 782.440002 161.880005 58.119999
2016-09-06 107.699997 780.080017 160.350006 57.610001
2016-09-07 108.360001 780.349976 161.639999 57.660000
2016-09-15 115.570000 771.760010 155.660004 57.189999
2016-09-22 114.620003 787.210022 156.110001 57.820000
2016-09-23 112.709999 786.900024 154.979996 57.430000
2016-09-27 113.089996 783.010010 156.770004 57.950001
2016-09-28 113.949997 781.559998 158.289993 58.029999
2016-10-10 116.050003 785.940002 157.020004 58.040001
2016-10-11 116.300003 783.070007 154.789993 57.189999
2016-10-12 117.339996 786.140015 154.289993 57.110001
2016-10-13 116.980003 778.190002 153.720001 56.919998
2016-10-14 117.629997 778.530029 154.449997 57.419998
2016-10-17 117.550003 779.960022 154.770004 57.220001
2016-10-18 117.470001 795.260010 150.720001 57.660000
2016-10-19 117.120003 801.500000 151.259995 57.529999
2016-10-20 117.059998 796.969971 151.520004 57.250000
2016-10-21 116.599998 799.369995 149.630005 59.660000
2016-10-24 117.650002 813.109985 150.570007 61.000000
2016-10-25 118.250000 807.669983 150.880005 60.990002
2016-10-26 115.589996 799.070007 151.809998 60.630001
2016-10-27 114.480003 795.349976 153.350006 60.099998
2016-10-28 113.720001 795.369995 152.610001 59.869999
2016-10-31 113.540001 784.539978 153.690002 59.919998
2016-11-01 111.489998 783.609985 152.789993 59.799999
2016-11-07 110.410004 782.520020 155.720001 60.419998
2016-11-08 111.059998 790.510010 155.169998 60.470001
2016-11-09 110.879997 785.309998 154.809998 60.169998
2016-12-09 113.949997 789.289978 166.520004 61.970001
2016-12-12 113.300003 789.270020 165.500000 62.169998
2016-12-13 115.190002 796.099976 168.289993 62.980000
2016-12-14 115.190002 797.070007 168.509995 62.680000
2016-12-15 115.820000 797.849976 168.020004 62.580002
2016-12-16 115.970001 790.799988 166.729996 62.299999
2016-12-19 116.639999 794.200012 166.679993 63.619999
2016-12-20 116.949997 796.419983 167.600006 63.540001
2016-12-21 117.059998 794.559998 167.330002 63.540001
2016-12-22 116.290001 791.260010 167.059998 63.549999
2016-12-23 116.519997 789.909973 166.710007 63.240002
2016-12-27 117.260002 791.549988 167.139999 63.279999
2016-12-28 116.760002 785.049988 166.190002 62.990002
2016-12-29 116.730003 782.789978 166.600006 62.900002
2016-12-30 115.820000 771.820007 165.990005 62.139999

andやorではなく&や|を使う。andと&の違いはまた調べてきます。


In [75]:
(df['AAPL']>110) and (df['GOOG']>750)


---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-75-c22ae1aa80a1> in <module>()
----> 1 (df['AAPL']>110) and (df['GOOG']>750)

/anaconda/lib/python3.6/site-packages/pandas/core/generic.py in __nonzero__(self)
    915         raise ValueError("The truth value of a {0} is ambiguous. "
    916                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 917                          .format(self.__class__.__name__))
    918 
    919     __bool__ = __nonzero__

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

アップルとグーグルの株価が一定以上のときのIBMとマイクロソフトの株価を抽出する。(実務では年齢とBMIが一定以上の血圧とコレステロール値を抽出するなど)


In [76]:
df[(df['AAPL']>110) & (df['GOOG']>750)][['IBM','MSFT']]


Out[76]:
IBM MSFT
Date
2016-04-13 151.229996 55.349998
2016-04-14 151.160004 55.360001
2016-09-14 154.050003 56.259998
2016-09-15 155.660004 57.189999
2016-09-16 153.839996 57.250000
2016-09-19 154.869995 56.930000
2016-09-20 154.449997 56.810001
2016-09-21 155.529999 57.759998
2016-09-22 156.110001 57.820000
2016-09-23 154.979996 57.430000
2016-09-26 153.979996 56.900002
2016-09-27 156.770004 57.950001
2016-09-28 158.289993 58.029999
2016-09-29 158.110001 57.400002
2016-09-30 158.850006 57.599998
2016-10-03 157.610001 57.419998
2016-10-04 156.460007 57.240002
2016-10-05 157.080002 57.639999
2016-10-06 156.880005 57.740002
2016-10-07 155.669998 57.799999
2016-10-10 157.020004 58.040001
2016-10-11 154.789993 57.189999
2016-10-12 154.289993 57.110001
2016-10-13 153.720001 56.919998
2016-10-14 154.449997 57.419998
2016-10-17 154.770004 57.220001
2016-10-18 150.720001 57.660000
2016-10-19 151.259995 57.529999
2016-10-20 151.520004 57.250000
2016-10-21 149.630005 59.660000
... ... ...
2016-11-01 152.789993 59.799999
2016-11-02 151.949997 59.430000
2016-11-07 155.720001 60.419998
2016-11-08 155.169998 60.470001
2016-11-09 154.809998 60.169998
2016-11-18 160.389999 60.349998
2016-11-21 162.770004 60.860001
2016-11-22 162.669998 61.119999
2016-11-23 161.979996 60.400002
2016-11-25 163.139999 60.529999
2016-11-28 164.520004 60.610001
2016-11-29 163.529999 61.090000
2016-11-30 162.220001 60.259998
2016-12-07 164.789993 61.369999
2016-12-08 165.360001 61.009998
2016-12-09 166.520004 61.970001
2016-12-12 165.500000 62.169998
2016-12-13 168.289993 62.980000
2016-12-14 168.509995 62.680000
2016-12-15 168.020004 62.580002
2016-12-16 166.729996 62.299999
2016-12-19 166.679993 63.619999
2016-12-20 167.600006 63.540001
2016-12-21 167.330002 63.540001
2016-12-22 167.059998 63.549999
2016-12-23 166.710007 63.240002
2016-12-27 167.139999 63.279999
2016-12-28 166.190002 62.990002
2016-12-29 166.600006 62.900002
2016-12-30 165.990005 62.139999

66 rows × 2 columns

条件に合う部分を置換する。


In [77]:
df['IBM'] = 100

In [78]:
df


Out[78]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 100 54.799999
2016-01-05 102.709999 742.580017 100 55.049999
2016-01-06 100.699997 743.619995 100 54.049999
2016-01-07 96.449997 726.390015 100 52.169998
2016-01-08 96.959999 714.469971 100 52.330002
2016-01-11 98.529999 716.030029 100 52.299999
2016-01-12 99.959999 726.070007 100 52.779999
2016-01-13 97.389999 700.559998 100 51.639999
2016-01-14 99.519997 714.719971 100 53.110001
2016-01-15 97.129997 694.450012 100 50.990002
2016-01-19 96.660004 701.789978 100 50.560001
2016-01-20 96.790001 698.450012 100 50.790001
2016-01-21 96.300003 706.590027 100 50.480000
2016-01-22 101.419998 725.250000 100 52.290001
2016-01-25 99.440002 711.669983 100 51.790001
2016-01-26 99.989998 713.039978 100 52.169998
2016-01-27 93.419998 699.989990 100 51.220001
2016-01-28 94.089996 730.960022 100 52.060001
2016-01-29 97.339996 742.950012 100 55.090000
2016-02-01 96.430000 752.000000 100 54.709999
2016-02-02 94.480003 764.650024 100 53.000000
2016-02-03 96.349998 726.950012 100 52.160000
2016-02-04 96.599998 708.010010 100 52.000000
2016-02-05 94.019997 683.570007 100 50.160000
2016-02-08 95.010002 682.739990 100 49.410000
2016-02-09 94.989998 678.109985 100 49.279999
2016-02-10 94.269997 684.119995 100 49.709999
2016-02-11 93.699997 683.109985 100 49.689999
2016-02-12 93.989998 682.400024 100 50.500000
2016-02-16 96.639999 691.000000 100 51.090000
... ... ... ... ...
2016-11-17 109.949997 771.229980 100 60.639999
2016-11-18 110.059998 760.539978 100 60.349998
2016-11-21 111.730003 769.200012 100 60.860001
2016-11-22 111.800003 768.270020 100 61.119999
2016-11-23 111.230003 760.989990 100 60.400002
2016-11-25 111.790001 761.679993 100 60.529999
2016-11-28 111.570000 768.239990 100 60.610001
2016-11-29 111.459999 770.840027 100 61.090000
2016-11-30 110.519997 758.039978 100 60.259998
2016-12-01 109.489998 747.919983 100 59.200001
2016-12-02 109.900002 750.500000 100 59.250000
2016-12-05 109.110001 762.520020 100 60.220001
2016-12-06 109.949997 759.109985 100 59.950001
2016-12-07 111.029999 771.190002 100 61.369999
2016-12-08 112.120003 776.419983 100 61.009998
2016-12-09 113.949997 789.289978 100 61.970001
2016-12-12 113.300003 789.270020 100 62.169998
2016-12-13 115.190002 796.099976 100 62.980000
2016-12-14 115.190002 797.070007 100 62.680000
2016-12-15 115.820000 797.849976 100 62.580002
2016-12-16 115.970001 790.799988 100 62.299999
2016-12-19 116.639999 794.200012 100 63.619999
2016-12-20 116.949997 796.419983 100 63.540001
2016-12-21 117.059998 794.559998 100 63.540001
2016-12-22 116.290001 791.260010 100 63.549999
2016-12-23 116.519997 789.909973 100 63.240002
2016-12-27 117.260002 791.549988 100 63.279999
2016-12-28 116.760002 785.049988 100 62.990002
2016-12-29 116.730003 782.789978 100 62.900002
2016-12-30 115.820000 771.820007 100 62.139999

252 rows × 4 columns

条件でも置換可能。


In [79]:
df[(df['AAPL']>110) & (df['GOOG']>750)] = 200

In [80]:
df


Out[80]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 100 54.799999
2016-01-05 102.709999 742.580017 100 55.049999
2016-01-06 100.699997 743.619995 100 54.049999
2016-01-07 96.449997 726.390015 100 52.169998
2016-01-08 96.959999 714.469971 100 52.330002
2016-01-11 98.529999 716.030029 100 52.299999
2016-01-12 99.959999 726.070007 100 52.779999
2016-01-13 97.389999 700.559998 100 51.639999
2016-01-14 99.519997 714.719971 100 53.110001
2016-01-15 97.129997 694.450012 100 50.990002
2016-01-19 96.660004 701.789978 100 50.560001
2016-01-20 96.790001 698.450012 100 50.790001
2016-01-21 96.300003 706.590027 100 50.480000
2016-01-22 101.419998 725.250000 100 52.290001
2016-01-25 99.440002 711.669983 100 51.790001
2016-01-26 99.989998 713.039978 100 52.169998
2016-01-27 93.419998 699.989990 100 51.220001
2016-01-28 94.089996 730.960022 100 52.060001
2016-01-29 97.339996 742.950012 100 55.090000
2016-02-01 96.430000 752.000000 100 54.709999
2016-02-02 94.480003 764.650024 100 53.000000
2016-02-03 96.349998 726.950012 100 52.160000
2016-02-04 96.599998 708.010010 100 52.000000
2016-02-05 94.019997 683.570007 100 50.160000
2016-02-08 95.010002 682.739990 100 49.410000
2016-02-09 94.989998 678.109985 100 49.279999
2016-02-10 94.269997 684.119995 100 49.709999
2016-02-11 93.699997 683.109985 100 49.689999
2016-02-12 93.989998 682.400024 100 50.500000
2016-02-16 96.639999 691.000000 100 51.090000
... ... ... ... ...
2016-11-17 109.949997 771.229980 100 60.639999
2016-11-18 200.000000 200.000000 200 200.000000
2016-11-21 200.000000 200.000000 200 200.000000
2016-11-22 200.000000 200.000000 200 200.000000
2016-11-23 200.000000 200.000000 200 200.000000
2016-11-25 200.000000 200.000000 200 200.000000
2016-11-28 200.000000 200.000000 200 200.000000
2016-11-29 200.000000 200.000000 200 200.000000
2016-11-30 200.000000 200.000000 200 200.000000
2016-12-01 109.489998 747.919983 100 59.200001
2016-12-02 109.900002 750.500000 100 59.250000
2016-12-05 109.110001 762.520020 100 60.220001
2016-12-06 109.949997 759.109985 100 59.950001
2016-12-07 200.000000 200.000000 200 200.000000
2016-12-08 200.000000 200.000000 200 200.000000
2016-12-09 200.000000 200.000000 200 200.000000
2016-12-12 200.000000 200.000000 200 200.000000
2016-12-13 200.000000 200.000000 200 200.000000
2016-12-14 200.000000 200.000000 200 200.000000
2016-12-15 200.000000 200.000000 200 200.000000
2016-12-16 200.000000 200.000000 200 200.000000
2016-12-19 200.000000 200.000000 200 200.000000
2016-12-20 200.000000 200.000000 200 200.000000
2016-12-21 200.000000 200.000000 200 200.000000
2016-12-22 200.000000 200.000000 200 200.000000
2016-12-23 200.000000 200.000000 200 200.000000
2016-12-27 200.000000 200.000000 200 200.000000
2016-12-28 200.000000 200.000000 200 200.000000
2016-12-29 200.000000 200.000000 200 200.000000
2016-12-30 200.000000 200.000000 200 200.000000

252 rows × 4 columns

いろいろ置換したのでコピーを使って元に戻す。


In [83]:
df = df2.copy()

条件抽出した上で、特定の列を置換したい。


In [84]:
df[(df['AAPL']>110) & (df['GOOG']>750)]['MSFT']=0


/anaconda/lib/python3.6/site-packages/ipykernel/__main__.py:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  if __name__ == '__main__':

whereとmaskによる抽出や置換

whereを使うと良い。条件抽出し、抽出されなかったものをNaNで置換する。


In [85]:
df.where(df < 100)#デフォルトはNaN


Out[85]:
AAPL GOOG IBM MSFT
Date
2016-01-04 NaN NaN NaN 54.799999
2016-01-05 NaN NaN NaN 55.049999
2016-01-06 NaN NaN NaN 54.049999
2016-01-07 96.449997 NaN NaN 52.169998
2016-01-08 96.959999 NaN NaN 52.330002
2016-01-11 98.529999 NaN NaN 52.299999
2016-01-12 99.959999 NaN NaN 52.779999
2016-01-13 97.389999 NaN NaN 51.639999
2016-01-14 99.519997 NaN NaN 53.110001
2016-01-15 97.129997 NaN NaN 50.990002
2016-01-19 96.660004 NaN NaN 50.560001
2016-01-20 96.790001 NaN NaN 50.790001
2016-01-21 96.300003 NaN NaN 50.480000
2016-01-22 NaN NaN NaN 52.290001
2016-01-25 99.440002 NaN NaN 51.790001
2016-01-26 99.989998 NaN NaN 52.169998
2016-01-27 93.419998 NaN NaN 51.220001
2016-01-28 94.089996 NaN NaN 52.060001
2016-01-29 97.339996 NaN NaN 55.090000
2016-02-01 96.430000 NaN NaN 54.709999
2016-02-02 94.480003 NaN NaN 53.000000
2016-02-03 96.349998 NaN NaN 52.160000
2016-02-04 96.599998 NaN NaN 52.000000
2016-02-05 94.019997 NaN NaN 50.160000
2016-02-08 95.010002 NaN NaN 49.410000
2016-02-09 94.989998 NaN NaN 49.279999
2016-02-10 94.269997 NaN NaN 49.709999
2016-02-11 93.699997 NaN NaN 49.689999
2016-02-12 93.989998 NaN NaN 50.500000
2016-02-16 96.639999 NaN NaN 51.090000
... ... ... ... ...
2016-11-17 NaN NaN NaN 60.639999
2016-11-18 NaN NaN NaN 60.349998
2016-11-21 NaN NaN NaN 60.860001
2016-11-22 NaN NaN NaN 61.119999
2016-11-23 NaN NaN NaN 60.400002
2016-11-25 NaN NaN NaN 60.529999
2016-11-28 NaN NaN NaN 60.610001
2016-11-29 NaN NaN NaN 61.090000
2016-11-30 NaN NaN NaN 60.259998
2016-12-01 NaN NaN NaN 59.200001
2016-12-02 NaN NaN NaN 59.250000
2016-12-05 NaN NaN NaN 60.220001
2016-12-06 NaN NaN NaN 59.950001
2016-12-07 NaN NaN NaN 61.369999
2016-12-08 NaN NaN NaN 61.009998
2016-12-09 NaN NaN NaN 61.970001
2016-12-12 NaN NaN NaN 62.169998
2016-12-13 NaN NaN NaN 62.980000
2016-12-14 NaN NaN NaN 62.680000
2016-12-15 NaN NaN NaN 62.580002
2016-12-16 NaN NaN NaN 62.299999
2016-12-19 NaN NaN NaN 63.619999
2016-12-20 NaN NaN NaN 63.540001
2016-12-21 NaN NaN NaN 63.540001
2016-12-22 NaN NaN NaN 63.549999
2016-12-23 NaN NaN NaN 63.240002
2016-12-27 NaN NaN NaN 63.279999
2016-12-28 NaN NaN NaN 62.990002
2016-12-29 NaN NaN NaN 62.900002
2016-12-30 NaN NaN NaN 62.139999

252 rows × 4 columns

置換する値を指定できる。


In [86]:
df.where(df < 100,10)


Out[86]:
AAPL GOOG IBM MSFT
Date
2016-01-04 10.000000 10.0 10.0 54.799999
2016-01-05 10.000000 10.0 10.0 55.049999
2016-01-06 10.000000 10.0 10.0 54.049999
2016-01-07 96.449997 10.0 10.0 52.169998
2016-01-08 96.959999 10.0 10.0 52.330002
2016-01-11 98.529999 10.0 10.0 52.299999
2016-01-12 99.959999 10.0 10.0 52.779999
2016-01-13 97.389999 10.0 10.0 51.639999
2016-01-14 99.519997 10.0 10.0 53.110001
2016-01-15 97.129997 10.0 10.0 50.990002
2016-01-19 96.660004 10.0 10.0 50.560001
2016-01-20 96.790001 10.0 10.0 50.790001
2016-01-21 96.300003 10.0 10.0 50.480000
2016-01-22 10.000000 10.0 10.0 52.290001
2016-01-25 99.440002 10.0 10.0 51.790001
2016-01-26 99.989998 10.0 10.0 52.169998
2016-01-27 93.419998 10.0 10.0 51.220001
2016-01-28 94.089996 10.0 10.0 52.060001
2016-01-29 97.339996 10.0 10.0 55.090000
2016-02-01 96.430000 10.0 10.0 54.709999
2016-02-02 94.480003 10.0 10.0 53.000000
2016-02-03 96.349998 10.0 10.0 52.160000
2016-02-04 96.599998 10.0 10.0 52.000000
2016-02-05 94.019997 10.0 10.0 50.160000
2016-02-08 95.010002 10.0 10.0 49.410000
2016-02-09 94.989998 10.0 10.0 49.279999
2016-02-10 94.269997 10.0 10.0 49.709999
2016-02-11 93.699997 10.0 10.0 49.689999
2016-02-12 93.989998 10.0 10.0 50.500000
2016-02-16 96.639999 10.0 10.0 51.090000
... ... ... ... ...
2016-11-17 10.000000 10.0 10.0 60.639999
2016-11-18 10.000000 10.0 10.0 60.349998
2016-11-21 10.000000 10.0 10.0 60.860001
2016-11-22 10.000000 10.0 10.0 61.119999
2016-11-23 10.000000 10.0 10.0 60.400002
2016-11-25 10.000000 10.0 10.0 60.529999
2016-11-28 10.000000 10.0 10.0 60.610001
2016-11-29 10.000000 10.0 10.0 61.090000
2016-11-30 10.000000 10.0 10.0 60.259998
2016-12-01 10.000000 10.0 10.0 59.200001
2016-12-02 10.000000 10.0 10.0 59.250000
2016-12-05 10.000000 10.0 10.0 60.220001
2016-12-06 10.000000 10.0 10.0 59.950001
2016-12-07 10.000000 10.0 10.0 61.369999
2016-12-08 10.000000 10.0 10.0 61.009998
2016-12-09 10.000000 10.0 10.0 61.970001
2016-12-12 10.000000 10.0 10.0 62.169998
2016-12-13 10.000000 10.0 10.0 62.980000
2016-12-14 10.000000 10.0 10.0 62.680000
2016-12-15 10.000000 10.0 10.0 62.580002
2016-12-16 10.000000 10.0 10.0 62.299999
2016-12-19 10.000000 10.0 10.0 63.619999
2016-12-20 10.000000 10.0 10.0 63.540001
2016-12-21 10.000000 10.0 10.0 63.540001
2016-12-22 10.000000 10.0 10.0 63.549999
2016-12-23 10.000000 10.0 10.0 63.240002
2016-12-27 10.000000 10.0 10.0 63.279999
2016-12-28 10.000000 10.0 10.0 62.990002
2016-12-29 10.000000 10.0 10.0 62.900002
2016-12-30 10.000000 10.0 10.0 62.139999

252 rows × 4 columns


In [87]:
df


Out[87]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 135.949997 54.799999
2016-01-05 102.709999 742.580017 135.850006 55.049999
2016-01-06 100.699997 743.619995 135.169998 54.049999
2016-01-07 96.449997 726.390015 132.860001 52.169998
2016-01-08 96.959999 714.469971 131.630005 52.330002
2016-01-11 98.529999 716.030029 133.229996 52.299999
2016-01-12 99.959999 726.070007 132.899994 52.779999
2016-01-13 97.389999 700.559998 131.169998 51.639999
2016-01-14 99.519997 714.719971 132.910004 53.110001
2016-01-15 97.129997 694.450012 130.029999 50.990002
2016-01-19 96.660004 701.789978 128.110001 50.560001
2016-01-20 96.790001 698.450012 121.860001 50.790001
2016-01-21 96.300003 706.590027 122.910004 50.480000
2016-01-22 101.419998 725.250000 122.500000 52.290001
2016-01-25 99.440002 711.669983 122.080002 51.790001
2016-01-26 99.989998 713.039978 122.589996 52.169998
2016-01-27 93.419998 699.989990 120.959999 51.220001
2016-01-28 94.089996 730.960022 122.220001 52.060001
2016-01-29 97.339996 742.950012 124.790001 55.090000
2016-02-01 96.430000 752.000000 124.830002 54.709999
2016-02-02 94.480003 764.650024 122.940002 53.000000
2016-02-03 96.349998 726.950012 124.720001 52.160000
2016-02-04 96.599998 708.010010 127.650002 52.000000
2016-02-05 94.019997 683.570007 128.570007 50.160000
2016-02-08 95.010002 682.739990 126.980003 49.410000
2016-02-09 94.989998 678.109985 124.070000 49.279999
2016-02-10 94.269997 684.119995 120.190002 49.709999
2016-02-11 93.699997 683.109985 117.849998 49.689999
2016-02-12 93.989998 682.400024 121.040001 50.500000
2016-02-16 96.639999 691.000000 122.739998 51.090000
... ... ... ... ...
2016-11-17 109.949997 771.229980 159.800003 60.639999
2016-11-18 110.059998 760.539978 160.389999 60.349998
2016-11-21 111.730003 769.200012 162.770004 60.860001
2016-11-22 111.800003 768.270020 162.669998 61.119999
2016-11-23 111.230003 760.989990 161.979996 60.400002
2016-11-25 111.790001 761.679993 163.139999 60.529999
2016-11-28 111.570000 768.239990 164.520004 60.610001
2016-11-29 111.459999 770.840027 163.529999 61.090000
2016-11-30 110.519997 758.039978 162.220001 60.259998
2016-12-01 109.489998 747.919983 159.820007 59.200001
2016-12-02 109.900002 750.500000 160.020004 59.250000
2016-12-05 109.110001 762.520020 159.839996 60.220001
2016-12-06 109.949997 759.109985 160.350006 59.950001
2016-12-07 111.029999 771.190002 164.789993 61.369999
2016-12-08 112.120003 776.419983 165.360001 61.009998
2016-12-09 113.949997 789.289978 166.520004 61.970001
2016-12-12 113.300003 789.270020 165.500000 62.169998
2016-12-13 115.190002 796.099976 168.289993 62.980000
2016-12-14 115.190002 797.070007 168.509995 62.680000
2016-12-15 115.820000 797.849976 168.020004 62.580002
2016-12-16 115.970001 790.799988 166.729996 62.299999
2016-12-19 116.639999 794.200012 166.679993 63.619999
2016-12-20 116.949997 796.419983 167.600006 63.540001
2016-12-21 117.059998 794.559998 167.330002 63.540001
2016-12-22 116.290001 791.260010 167.059998 63.549999
2016-12-23 116.519997 789.909973 166.710007 63.240002
2016-12-27 117.260002 791.549988 167.139999 63.279999
2016-12-28 116.760002 785.049988 166.190002 62.990002
2016-12-29 116.730003 782.789978 166.600006 62.900002
2016-12-30 115.820000 771.820007 165.990005 62.139999

252 rows × 4 columns


In [88]:
df['MSFT']=df['MSFT'].where((df['AAPL']>110) & (df['GOOG']>750),0)

In [89]:
df


Out[89]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 135.949997 0.000000
2016-01-05 102.709999 742.580017 135.850006 0.000000
2016-01-06 100.699997 743.619995 135.169998 0.000000
2016-01-07 96.449997 726.390015 132.860001 0.000000
2016-01-08 96.959999 714.469971 131.630005 0.000000
2016-01-11 98.529999 716.030029 133.229996 0.000000
2016-01-12 99.959999 726.070007 132.899994 0.000000
2016-01-13 97.389999 700.559998 131.169998 0.000000
2016-01-14 99.519997 714.719971 132.910004 0.000000
2016-01-15 97.129997 694.450012 130.029999 0.000000
2016-01-19 96.660004 701.789978 128.110001 0.000000
2016-01-20 96.790001 698.450012 121.860001 0.000000
2016-01-21 96.300003 706.590027 122.910004 0.000000
2016-01-22 101.419998 725.250000 122.500000 0.000000
2016-01-25 99.440002 711.669983 122.080002 0.000000
2016-01-26 99.989998 713.039978 122.589996 0.000000
2016-01-27 93.419998 699.989990 120.959999 0.000000
2016-01-28 94.089996 730.960022 122.220001 0.000000
2016-01-29 97.339996 742.950012 124.790001 0.000000
2016-02-01 96.430000 752.000000 124.830002 0.000000
2016-02-02 94.480003 764.650024 122.940002 0.000000
2016-02-03 96.349998 726.950012 124.720001 0.000000
2016-02-04 96.599998 708.010010 127.650002 0.000000
2016-02-05 94.019997 683.570007 128.570007 0.000000
2016-02-08 95.010002 682.739990 126.980003 0.000000
2016-02-09 94.989998 678.109985 124.070000 0.000000
2016-02-10 94.269997 684.119995 120.190002 0.000000
2016-02-11 93.699997 683.109985 117.849998 0.000000
2016-02-12 93.989998 682.400024 121.040001 0.000000
2016-02-16 96.639999 691.000000 122.739998 0.000000
... ... ... ... ...
2016-11-17 109.949997 771.229980 159.800003 0.000000
2016-11-18 110.059998 760.539978 160.389999 60.349998
2016-11-21 111.730003 769.200012 162.770004 60.860001
2016-11-22 111.800003 768.270020 162.669998 61.119999
2016-11-23 111.230003 760.989990 161.979996 60.400002
2016-11-25 111.790001 761.679993 163.139999 60.529999
2016-11-28 111.570000 768.239990 164.520004 60.610001
2016-11-29 111.459999 770.840027 163.529999 61.090000
2016-11-30 110.519997 758.039978 162.220001 60.259998
2016-12-01 109.489998 747.919983 159.820007 0.000000
2016-12-02 109.900002 750.500000 160.020004 0.000000
2016-12-05 109.110001 762.520020 159.839996 0.000000
2016-12-06 109.949997 759.109985 160.350006 0.000000
2016-12-07 111.029999 771.190002 164.789993 61.369999
2016-12-08 112.120003 776.419983 165.360001 61.009998
2016-12-09 113.949997 789.289978 166.520004 61.970001
2016-12-12 113.300003 789.270020 165.500000 62.169998
2016-12-13 115.190002 796.099976 168.289993 62.980000
2016-12-14 115.190002 797.070007 168.509995 62.680000
2016-12-15 115.820000 797.849976 168.020004 62.580002
2016-12-16 115.970001 790.799988 166.729996 62.299999
2016-12-19 116.639999 794.200012 166.679993 63.619999
2016-12-20 116.949997 796.419983 167.600006 63.540001
2016-12-21 117.059998 794.559998 167.330002 63.540001
2016-12-22 116.290001 791.260010 167.059998 63.549999
2016-12-23 116.519997 789.909973 166.710007 63.240002
2016-12-27 117.260002 791.549988 167.139999 63.279999
2016-12-28 116.760002 785.049988 166.190002 62.990002
2016-12-29 116.730003 782.789978 166.600006 62.900002
2016-12-30 115.820000 771.820007 165.990005 62.139999

252 rows × 4 columns

条件に当てはまらないものを別の列で置換する。


In [90]:
df['AAPL'] = df['AAPL'].where(df['AAPL'] < 112, df['GOOG'])

In [91]:
df


Out[91]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 135.949997 0.000000
2016-01-05 102.709999 742.580017 135.850006 0.000000
2016-01-06 100.699997 743.619995 135.169998 0.000000
2016-01-07 96.449997 726.390015 132.860001 0.000000
2016-01-08 96.959999 714.469971 131.630005 0.000000
2016-01-11 98.529999 716.030029 133.229996 0.000000
2016-01-12 99.959999 726.070007 132.899994 0.000000
2016-01-13 97.389999 700.559998 131.169998 0.000000
2016-01-14 99.519997 714.719971 132.910004 0.000000
2016-01-15 97.129997 694.450012 130.029999 0.000000
2016-01-19 96.660004 701.789978 128.110001 0.000000
2016-01-20 96.790001 698.450012 121.860001 0.000000
2016-01-21 96.300003 706.590027 122.910004 0.000000
2016-01-22 101.419998 725.250000 122.500000 0.000000
2016-01-25 99.440002 711.669983 122.080002 0.000000
2016-01-26 99.989998 713.039978 122.589996 0.000000
2016-01-27 93.419998 699.989990 120.959999 0.000000
2016-01-28 94.089996 730.960022 122.220001 0.000000
2016-01-29 97.339996 742.950012 124.790001 0.000000
2016-02-01 96.430000 752.000000 124.830002 0.000000
2016-02-02 94.480003 764.650024 122.940002 0.000000
2016-02-03 96.349998 726.950012 124.720001 0.000000
2016-02-04 96.599998 708.010010 127.650002 0.000000
2016-02-05 94.019997 683.570007 128.570007 0.000000
2016-02-08 95.010002 682.739990 126.980003 0.000000
2016-02-09 94.989998 678.109985 124.070000 0.000000
2016-02-10 94.269997 684.119995 120.190002 0.000000
2016-02-11 93.699997 683.109985 117.849998 0.000000
2016-02-12 93.989998 682.400024 121.040001 0.000000
2016-02-16 96.639999 691.000000 122.739998 0.000000
... ... ... ... ...
2016-11-17 109.949997 771.229980 159.800003 0.000000
2016-11-18 110.059998 760.539978 160.389999 60.349998
2016-11-21 111.730003 769.200012 162.770004 60.860001
2016-11-22 111.800003 768.270020 162.669998 61.119999
2016-11-23 111.230003 760.989990 161.979996 60.400002
2016-11-25 111.790001 761.679993 163.139999 60.529999
2016-11-28 111.570000 768.239990 164.520004 60.610001
2016-11-29 111.459999 770.840027 163.529999 61.090000
2016-11-30 110.519997 758.039978 162.220001 60.259998
2016-12-01 109.489998 747.919983 159.820007 0.000000
2016-12-02 109.900002 750.500000 160.020004 0.000000
2016-12-05 109.110001 762.520020 159.839996 0.000000
2016-12-06 109.949997 759.109985 160.350006 0.000000
2016-12-07 111.029999 771.190002 164.789993 61.369999
2016-12-08 776.419983 776.419983 165.360001 61.009998
2016-12-09 789.289978 789.289978 166.520004 61.970001
2016-12-12 789.270020 789.270020 165.500000 62.169998
2016-12-13 796.099976 796.099976 168.289993 62.980000
2016-12-14 797.070007 797.070007 168.509995 62.680000
2016-12-15 797.849976 797.849976 168.020004 62.580002
2016-12-16 790.799988 790.799988 166.729996 62.299999
2016-12-19 794.200012 794.200012 166.679993 63.619999
2016-12-20 796.419983 796.419983 167.600006 63.540001
2016-12-21 794.559998 794.559998 167.330002 63.540001
2016-12-22 791.260010 791.260010 167.059998 63.549999
2016-12-23 789.909973 789.909973 166.710007 63.240002
2016-12-27 791.549988 791.549988 167.139999 63.279999
2016-12-28 785.049988 785.049988 166.190002 62.990002
2016-12-29 782.789978 782.789978 166.600006 62.900002
2016-12-30 771.820007 771.820007 165.990005 62.139999

252 rows × 4 columns


In [92]:
df.where(df < 100,other=10,inplace=True)

inplace=Trueで直接置換できる。


In [93]:
df


Out[93]:
AAPL GOOG IBM MSFT
Date
2016-01-04 10.000000 10.0 10.0 0.000000
2016-01-05 10.000000 10.0 10.0 0.000000
2016-01-06 10.000000 10.0 10.0 0.000000
2016-01-07 96.449997 10.0 10.0 0.000000
2016-01-08 96.959999 10.0 10.0 0.000000
2016-01-11 98.529999 10.0 10.0 0.000000
2016-01-12 99.959999 10.0 10.0 0.000000
2016-01-13 97.389999 10.0 10.0 0.000000
2016-01-14 99.519997 10.0 10.0 0.000000
2016-01-15 97.129997 10.0 10.0 0.000000
2016-01-19 96.660004 10.0 10.0 0.000000
2016-01-20 96.790001 10.0 10.0 0.000000
2016-01-21 96.300003 10.0 10.0 0.000000
2016-01-22 10.000000 10.0 10.0 0.000000
2016-01-25 99.440002 10.0 10.0 0.000000
2016-01-26 99.989998 10.0 10.0 0.000000
2016-01-27 93.419998 10.0 10.0 0.000000
2016-01-28 94.089996 10.0 10.0 0.000000
2016-01-29 97.339996 10.0 10.0 0.000000
2016-02-01 96.430000 10.0 10.0 0.000000
2016-02-02 94.480003 10.0 10.0 0.000000
2016-02-03 96.349998 10.0 10.0 0.000000
2016-02-04 96.599998 10.0 10.0 0.000000
2016-02-05 94.019997 10.0 10.0 0.000000
2016-02-08 95.010002 10.0 10.0 0.000000
2016-02-09 94.989998 10.0 10.0 0.000000
2016-02-10 94.269997 10.0 10.0 0.000000
2016-02-11 93.699997 10.0 10.0 0.000000
2016-02-12 93.989998 10.0 10.0 0.000000
2016-02-16 96.639999 10.0 10.0 0.000000
... ... ... ... ...
2016-11-17 10.000000 10.0 10.0 0.000000
2016-11-18 10.000000 10.0 10.0 60.349998
2016-11-21 10.000000 10.0 10.0 60.860001
2016-11-22 10.000000 10.0 10.0 61.119999
2016-11-23 10.000000 10.0 10.0 60.400002
2016-11-25 10.000000 10.0 10.0 60.529999
2016-11-28 10.000000 10.0 10.0 60.610001
2016-11-29 10.000000 10.0 10.0 61.090000
2016-11-30 10.000000 10.0 10.0 60.259998
2016-12-01 10.000000 10.0 10.0 0.000000
2016-12-02 10.000000 10.0 10.0 0.000000
2016-12-05 10.000000 10.0 10.0 0.000000
2016-12-06 10.000000 10.0 10.0 0.000000
2016-12-07 10.000000 10.0 10.0 61.369999
2016-12-08 10.000000 10.0 10.0 61.009998
2016-12-09 10.000000 10.0 10.0 61.970001
2016-12-12 10.000000 10.0 10.0 62.169998
2016-12-13 10.000000 10.0 10.0 62.980000
2016-12-14 10.000000 10.0 10.0 62.680000
2016-12-15 10.000000 10.0 10.0 62.580002
2016-12-16 10.000000 10.0 10.0 62.299999
2016-12-19 10.000000 10.0 10.0 63.619999
2016-12-20 10.000000 10.0 10.0 63.540001
2016-12-21 10.000000 10.0 10.0 63.540001
2016-12-22 10.000000 10.0 10.0 63.549999
2016-12-23 10.000000 10.0 10.0 63.240002
2016-12-27 10.000000 10.0 10.0 63.279999
2016-12-28 10.000000 10.0 10.0 62.990002
2016-12-29 10.000000 10.0 10.0 62.900002
2016-12-30 10.000000 10.0 10.0 62.139999

252 rows × 4 columns

置換はmaskのほうが感覚に合うので使いやすい。


In [95]:
df = df2.copy()

In [96]:
df.mask(df < 100)#デフォルトはNaN


Out[96]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 135.949997 NaN
2016-01-05 102.709999 742.580017 135.850006 NaN
2016-01-06 100.699997 743.619995 135.169998 NaN
2016-01-07 NaN 726.390015 132.860001 NaN
2016-01-08 NaN 714.469971 131.630005 NaN
2016-01-11 NaN 716.030029 133.229996 NaN
2016-01-12 NaN 726.070007 132.899994 NaN
2016-01-13 NaN 700.559998 131.169998 NaN
2016-01-14 NaN 714.719971 132.910004 NaN
2016-01-15 NaN 694.450012 130.029999 NaN
2016-01-19 NaN 701.789978 128.110001 NaN
2016-01-20 NaN 698.450012 121.860001 NaN
2016-01-21 NaN 706.590027 122.910004 NaN
2016-01-22 101.419998 725.250000 122.500000 NaN
2016-01-25 NaN 711.669983 122.080002 NaN
2016-01-26 NaN 713.039978 122.589996 NaN
2016-01-27 NaN 699.989990 120.959999 NaN
2016-01-28 NaN 730.960022 122.220001 NaN
2016-01-29 NaN 742.950012 124.790001 NaN
2016-02-01 NaN 752.000000 124.830002 NaN
2016-02-02 NaN 764.650024 122.940002 NaN
2016-02-03 NaN 726.950012 124.720001 NaN
2016-02-04 NaN 708.010010 127.650002 NaN
2016-02-05 NaN 683.570007 128.570007 NaN
2016-02-08 NaN 682.739990 126.980003 NaN
2016-02-09 NaN 678.109985 124.070000 NaN
2016-02-10 NaN 684.119995 120.190002 NaN
2016-02-11 NaN 683.109985 117.849998 NaN
2016-02-12 NaN 682.400024 121.040001 NaN
2016-02-16 NaN 691.000000 122.739998 NaN
... ... ... ... ...
2016-11-17 109.949997 771.229980 159.800003 NaN
2016-11-18 110.059998 760.539978 160.389999 NaN
2016-11-21 111.730003 769.200012 162.770004 NaN
2016-11-22 111.800003 768.270020 162.669998 NaN
2016-11-23 111.230003 760.989990 161.979996 NaN
2016-11-25 111.790001 761.679993 163.139999 NaN
2016-11-28 111.570000 768.239990 164.520004 NaN
2016-11-29 111.459999 770.840027 163.529999 NaN
2016-11-30 110.519997 758.039978 162.220001 NaN
2016-12-01 109.489998 747.919983 159.820007 NaN
2016-12-02 109.900002 750.500000 160.020004 NaN
2016-12-05 109.110001 762.520020 159.839996 NaN
2016-12-06 109.949997 759.109985 160.350006 NaN
2016-12-07 111.029999 771.190002 164.789993 NaN
2016-12-08 112.120003 776.419983 165.360001 NaN
2016-12-09 113.949997 789.289978 166.520004 NaN
2016-12-12 113.300003 789.270020 165.500000 NaN
2016-12-13 115.190002 796.099976 168.289993 NaN
2016-12-14 115.190002 797.070007 168.509995 NaN
2016-12-15 115.820000 797.849976 168.020004 NaN
2016-12-16 115.970001 790.799988 166.729996 NaN
2016-12-19 116.639999 794.200012 166.679993 NaN
2016-12-20 116.949997 796.419983 167.600006 NaN
2016-12-21 117.059998 794.559998 167.330002 NaN
2016-12-22 116.290001 791.260010 167.059998 NaN
2016-12-23 116.519997 789.909973 166.710007 NaN
2016-12-27 117.260002 791.549988 167.139999 NaN
2016-12-28 116.760002 785.049988 166.190002 NaN
2016-12-29 116.730003 782.789978 166.600006 NaN
2016-12-30 115.820000 771.820007 165.990005 NaN

252 rows × 4 columns


In [97]:
df.mask(df < 100,10)


Out[97]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 135.949997 10.0
2016-01-05 102.709999 742.580017 135.850006 10.0
2016-01-06 100.699997 743.619995 135.169998 10.0
2016-01-07 10.000000 726.390015 132.860001 10.0
2016-01-08 10.000000 714.469971 131.630005 10.0
2016-01-11 10.000000 716.030029 133.229996 10.0
2016-01-12 10.000000 726.070007 132.899994 10.0
2016-01-13 10.000000 700.559998 131.169998 10.0
2016-01-14 10.000000 714.719971 132.910004 10.0
2016-01-15 10.000000 694.450012 130.029999 10.0
2016-01-19 10.000000 701.789978 128.110001 10.0
2016-01-20 10.000000 698.450012 121.860001 10.0
2016-01-21 10.000000 706.590027 122.910004 10.0
2016-01-22 101.419998 725.250000 122.500000 10.0
2016-01-25 10.000000 711.669983 122.080002 10.0
2016-01-26 10.000000 713.039978 122.589996 10.0
2016-01-27 10.000000 699.989990 120.959999 10.0
2016-01-28 10.000000 730.960022 122.220001 10.0
2016-01-29 10.000000 742.950012 124.790001 10.0
2016-02-01 10.000000 752.000000 124.830002 10.0
2016-02-02 10.000000 764.650024 122.940002 10.0
2016-02-03 10.000000 726.950012 124.720001 10.0
2016-02-04 10.000000 708.010010 127.650002 10.0
2016-02-05 10.000000 683.570007 128.570007 10.0
2016-02-08 10.000000 682.739990 126.980003 10.0
2016-02-09 10.000000 678.109985 124.070000 10.0
2016-02-10 10.000000 684.119995 120.190002 10.0
2016-02-11 10.000000 683.109985 117.849998 10.0
2016-02-12 10.000000 682.400024 121.040001 10.0
2016-02-16 10.000000 691.000000 122.739998 10.0
... ... ... ... ...
2016-11-17 109.949997 771.229980 159.800003 10.0
2016-11-18 110.059998 760.539978 160.389999 10.0
2016-11-21 111.730003 769.200012 162.770004 10.0
2016-11-22 111.800003 768.270020 162.669998 10.0
2016-11-23 111.230003 760.989990 161.979996 10.0
2016-11-25 111.790001 761.679993 163.139999 10.0
2016-11-28 111.570000 768.239990 164.520004 10.0
2016-11-29 111.459999 770.840027 163.529999 10.0
2016-11-30 110.519997 758.039978 162.220001 10.0
2016-12-01 109.489998 747.919983 159.820007 10.0
2016-12-02 109.900002 750.500000 160.020004 10.0
2016-12-05 109.110001 762.520020 159.839996 10.0
2016-12-06 109.949997 759.109985 160.350006 10.0
2016-12-07 111.029999 771.190002 164.789993 10.0
2016-12-08 112.120003 776.419983 165.360001 10.0
2016-12-09 113.949997 789.289978 166.520004 10.0
2016-12-12 113.300003 789.270020 165.500000 10.0
2016-12-13 115.190002 796.099976 168.289993 10.0
2016-12-14 115.190002 797.070007 168.509995 10.0
2016-12-15 115.820000 797.849976 168.020004 10.0
2016-12-16 115.970001 790.799988 166.729996 10.0
2016-12-19 116.639999 794.200012 166.679993 10.0
2016-12-20 116.949997 796.419983 167.600006 10.0
2016-12-21 117.059998 794.559998 167.330002 10.0
2016-12-22 116.290001 791.260010 167.059998 10.0
2016-12-23 116.519997 789.909973 166.710007 10.0
2016-12-27 117.260002 791.549988 167.139999 10.0
2016-12-28 116.760002 785.049988 166.190002 10.0
2016-12-29 116.730003 782.789978 166.600006 10.0
2016-12-30 115.820000 771.820007 165.990005 10.0

252 rows × 4 columns


In [98]:
df['MSFT']=df['MSFT'].where((df['AAPL']>110) & (df['GOOG']>750),0)

In [99]:
df


Out[99]:
AAPL GOOG IBM MSFT
Date
2016-01-04 105.349998 741.840027 135.949997 0.000000
2016-01-05 102.709999 742.580017 135.850006 0.000000
2016-01-06 100.699997 743.619995 135.169998 0.000000
2016-01-07 96.449997 726.390015 132.860001 0.000000
2016-01-08 96.959999 714.469971 131.630005 0.000000
2016-01-11 98.529999 716.030029 133.229996 0.000000
2016-01-12 99.959999 726.070007 132.899994 0.000000
2016-01-13 97.389999 700.559998 131.169998 0.000000
2016-01-14 99.519997 714.719971 132.910004 0.000000
2016-01-15 97.129997 694.450012 130.029999 0.000000
2016-01-19 96.660004 701.789978 128.110001 0.000000
2016-01-20 96.790001 698.450012 121.860001 0.000000
2016-01-21 96.300003 706.590027 122.910004 0.000000
2016-01-22 101.419998 725.250000 122.500000 0.000000
2016-01-25 99.440002 711.669983 122.080002 0.000000
2016-01-26 99.989998 713.039978 122.589996 0.000000
2016-01-27 93.419998 699.989990 120.959999 0.000000
2016-01-28 94.089996 730.960022 122.220001 0.000000
2016-01-29 97.339996 742.950012 124.790001 0.000000
2016-02-01 96.430000 752.000000 124.830002 0.000000
2016-02-02 94.480003 764.650024 122.940002 0.000000
2016-02-03 96.349998 726.950012 124.720001 0.000000
2016-02-04 96.599998 708.010010 127.650002 0.000000
2016-02-05 94.019997 683.570007 128.570007 0.000000
2016-02-08 95.010002 682.739990 126.980003 0.000000
2016-02-09 94.989998 678.109985 124.070000 0.000000
2016-02-10 94.269997 684.119995 120.190002 0.000000
2016-02-11 93.699997 683.109985 117.849998 0.000000
2016-02-12 93.989998 682.400024 121.040001 0.000000
2016-02-16 96.639999 691.000000 122.739998 0.000000
... ... ... ... ...
2016-11-17 109.949997 771.229980 159.800003 0.000000
2016-11-18 110.059998 760.539978 160.389999 60.349998
2016-11-21 111.730003 769.200012 162.770004 60.860001
2016-11-22 111.800003 768.270020 162.669998 61.119999
2016-11-23 111.230003 760.989990 161.979996 60.400002
2016-11-25 111.790001 761.679993 163.139999 60.529999
2016-11-28 111.570000 768.239990 164.520004 60.610001
2016-11-29 111.459999 770.840027 163.529999 61.090000
2016-11-30 110.519997 758.039978 162.220001 60.259998
2016-12-01 109.489998 747.919983 159.820007 0.000000
2016-12-02 109.900002 750.500000 160.020004 0.000000
2016-12-05 109.110001 762.520020 159.839996 0.000000
2016-12-06 109.949997 759.109985 160.350006 0.000000
2016-12-07 111.029999 771.190002 164.789993 61.369999
2016-12-08 112.120003 776.419983 165.360001 61.009998
2016-12-09 113.949997 789.289978 166.520004 61.970001
2016-12-12 113.300003 789.270020 165.500000 62.169998
2016-12-13 115.190002 796.099976 168.289993 62.980000
2016-12-14 115.190002 797.070007 168.509995 62.680000
2016-12-15 115.820000 797.849976 168.020004 62.580002
2016-12-16 115.970001 790.799988 166.729996 62.299999
2016-12-19 116.639999 794.200012 166.679993 63.619999
2016-12-20 116.949997 796.419983 167.600006 63.540001
2016-12-21 117.059998 794.559998 167.330002 63.540001
2016-12-22 116.290001 791.260010 167.059998 63.549999
2016-12-23 116.519997 789.909973 166.710007 63.240002
2016-12-27 117.260002 791.549988 167.139999 63.279999
2016-12-28 116.760002 785.049988 166.190002 62.990002
2016-12-29 116.730003 782.789978 166.600006 62.900002
2016-12-30 115.820000 771.820007 165.990005 62.139999

252 rows × 4 columns

条件に合うものを別の列で置換する


In [100]:
df['AAPL'] = df['AAPL'].mask(df['AAPL'] < 112, df['GOOG'])

In [101]:
df


Out[101]:
AAPL GOOG IBM MSFT
Date
2016-01-04 741.840027 741.840027 135.949997 0.000000
2016-01-05 742.580017 742.580017 135.850006 0.000000
2016-01-06 743.619995 743.619995 135.169998 0.000000
2016-01-07 726.390015 726.390015 132.860001 0.000000
2016-01-08 714.469971 714.469971 131.630005 0.000000
2016-01-11 716.030029 716.030029 133.229996 0.000000
2016-01-12 726.070007 726.070007 132.899994 0.000000
2016-01-13 700.559998 700.559998 131.169998 0.000000
2016-01-14 714.719971 714.719971 132.910004 0.000000
2016-01-15 694.450012 694.450012 130.029999 0.000000
2016-01-19 701.789978 701.789978 128.110001 0.000000
2016-01-20 698.450012 698.450012 121.860001 0.000000
2016-01-21 706.590027 706.590027 122.910004 0.000000
2016-01-22 725.250000 725.250000 122.500000 0.000000
2016-01-25 711.669983 711.669983 122.080002 0.000000
2016-01-26 713.039978 713.039978 122.589996 0.000000
2016-01-27 699.989990 699.989990 120.959999 0.000000
2016-01-28 730.960022 730.960022 122.220001 0.000000
2016-01-29 742.950012 742.950012 124.790001 0.000000
2016-02-01 752.000000 752.000000 124.830002 0.000000
2016-02-02 764.650024 764.650024 122.940002 0.000000
2016-02-03 726.950012 726.950012 124.720001 0.000000
2016-02-04 708.010010 708.010010 127.650002 0.000000
2016-02-05 683.570007 683.570007 128.570007 0.000000
2016-02-08 682.739990 682.739990 126.980003 0.000000
2016-02-09 678.109985 678.109985 124.070000 0.000000
2016-02-10 684.119995 684.119995 120.190002 0.000000
2016-02-11 683.109985 683.109985 117.849998 0.000000
2016-02-12 682.400024 682.400024 121.040001 0.000000
2016-02-16 691.000000 691.000000 122.739998 0.000000
... ... ... ... ...
2016-11-17 771.229980 771.229980 159.800003 0.000000
2016-11-18 760.539978 760.539978 160.389999 60.349998
2016-11-21 769.200012 769.200012 162.770004 60.860001
2016-11-22 768.270020 768.270020 162.669998 61.119999
2016-11-23 760.989990 760.989990 161.979996 60.400002
2016-11-25 761.679993 761.679993 163.139999 60.529999
2016-11-28 768.239990 768.239990 164.520004 60.610001
2016-11-29 770.840027 770.840027 163.529999 61.090000
2016-11-30 758.039978 758.039978 162.220001 60.259998
2016-12-01 747.919983 747.919983 159.820007 0.000000
2016-12-02 750.500000 750.500000 160.020004 0.000000
2016-12-05 762.520020 762.520020 159.839996 0.000000
2016-12-06 759.109985 759.109985 160.350006 0.000000
2016-12-07 771.190002 771.190002 164.789993 61.369999
2016-12-08 112.120003 776.419983 165.360001 61.009998
2016-12-09 113.949997 789.289978 166.520004 61.970001
2016-12-12 113.300003 789.270020 165.500000 62.169998
2016-12-13 115.190002 796.099976 168.289993 62.980000
2016-12-14 115.190002 797.070007 168.509995 62.680000
2016-12-15 115.820000 797.849976 168.020004 62.580002
2016-12-16 115.970001 790.799988 166.729996 62.299999
2016-12-19 116.639999 794.200012 166.679993 63.619999
2016-12-20 116.949997 796.419983 167.600006 63.540001
2016-12-21 117.059998 794.559998 167.330002 63.540001
2016-12-22 116.290001 791.260010 167.059998 63.549999
2016-12-23 116.519997 789.909973 166.710007 63.240002
2016-12-27 117.260002 791.549988 167.139999 63.279999
2016-12-28 116.760002 785.049988 166.190002 62.990002
2016-12-29 116.730003 782.789978 166.600006 62.900002
2016-12-30 115.820000 771.820007 165.990005 62.139999

252 rows × 4 columns

インデックスとカラムの置換


In [102]:
len(df)


Out[102]:
252

In [103]:
list(range(1,len(df)+1))


Out[103]:
[1,
 2,
 3,
 4,
 5,
 6,
 7,
 8,
 9,
 10,
 11,
 12,
 13,
 14,
 15,
 16,
 17,
 18,
 19,
 20,
 21,
 22,
 23,
 24,
 25,
 26,
 27,
 28,
 29,
 30,
 31,
 32,
 33,
 34,
 35,
 36,
 37,
 38,
 39,
 40,
 41,
 42,
 43,
 44,
 45,
 46,
 47,
 48,
 49,
 50,
 51,
 52,
 53,
 54,
 55,
 56,
 57,
 58,
 59,
 60,
 61,
 62,
 63,
 64,
 65,
 66,
 67,
 68,
 69,
 70,
 71,
 72,
 73,
 74,
 75,
 76,
 77,
 78,
 79,
 80,
 81,
 82,
 83,
 84,
 85,
 86,
 87,
 88,
 89,
 90,
 91,
 92,
 93,
 94,
 95,
 96,
 97,
 98,
 99,
 100,
 101,
 102,
 103,
 104,
 105,
 106,
 107,
 108,
 109,
 110,
 111,
 112,
 113,
 114,
 115,
 116,
 117,
 118,
 119,
 120,
 121,
 122,
 123,
 124,
 125,
 126,
 127,
 128,
 129,
 130,
 131,
 132,
 133,
 134,
 135,
 136,
 137,
 138,
 139,
 140,
 141,
 142,
 143,
 144,
 145,
 146,
 147,
 148,
 149,
 150,
 151,
 152,
 153,
 154,
 155,
 156,
 157,
 158,
 159,
 160,
 161,
 162,
 163,
 164,
 165,
 166,
 167,
 168,
 169,
 170,
 171,
 172,
 173,
 174,
 175,
 176,
 177,
 178,
 179,
 180,
 181,
 182,
 183,
 184,
 185,
 186,
 187,
 188,
 189,
 190,
 191,
 192,
 193,
 194,
 195,
 196,
 197,
 198,
 199,
 200,
 201,
 202,
 203,
 204,
 205,
 206,
 207,
 208,
 209,
 210,
 211,
 212,
 213,
 214,
 215,
 216,
 217,
 218,
 219,
 220,
 221,
 222,
 223,
 224,
 225,
 226,
 227,
 228,
 229,
 230,
 231,
 232,
 233,
 234,
 235,
 236,
 237,
 238,
 239,
 240,
 241,
 242,
 243,
 244,
 245,
 246,
 247,
 248,
 249,
 250,
 251,
 252]

In [104]:
df.index = range(1,len(df)+1)

In [106]:
df.columns = ['a','b','c','d']

In [107]:
df


Out[107]:
a b c d
1 741.840027 741.840027 135.949997 0.000000
2 742.580017 742.580017 135.850006 0.000000
3 743.619995 743.619995 135.169998 0.000000
4 726.390015 726.390015 132.860001 0.000000
5 714.469971 714.469971 131.630005 0.000000
6 716.030029 716.030029 133.229996 0.000000
7 726.070007 726.070007 132.899994 0.000000
8 700.559998 700.559998 131.169998 0.000000
9 714.719971 714.719971 132.910004 0.000000
10 694.450012 694.450012 130.029999 0.000000
11 701.789978 701.789978 128.110001 0.000000
12 698.450012 698.450012 121.860001 0.000000
13 706.590027 706.590027 122.910004 0.000000
14 725.250000 725.250000 122.500000 0.000000
15 711.669983 711.669983 122.080002 0.000000
16 713.039978 713.039978 122.589996 0.000000
17 699.989990 699.989990 120.959999 0.000000
18 730.960022 730.960022 122.220001 0.000000
19 742.950012 742.950012 124.790001 0.000000
20 752.000000 752.000000 124.830002 0.000000
21 764.650024 764.650024 122.940002 0.000000
22 726.950012 726.950012 124.720001 0.000000
23 708.010010 708.010010 127.650002 0.000000
24 683.570007 683.570007 128.570007 0.000000
25 682.739990 682.739990 126.980003 0.000000
26 678.109985 678.109985 124.070000 0.000000
27 684.119995 684.119995 120.190002 0.000000
28 683.109985 683.109985 117.849998 0.000000
29 682.400024 682.400024 121.040001 0.000000
30 691.000000 691.000000 122.739998 0.000000
... ... ... ... ...
223 771.229980 771.229980 159.800003 0.000000
224 760.539978 760.539978 160.389999 60.349998
225 769.200012 769.200012 162.770004 60.860001
226 768.270020 768.270020 162.669998 61.119999
227 760.989990 760.989990 161.979996 60.400002
228 761.679993 761.679993 163.139999 60.529999
229 768.239990 768.239990 164.520004 60.610001
230 770.840027 770.840027 163.529999 61.090000
231 758.039978 758.039978 162.220001 60.259998
232 747.919983 747.919983 159.820007 0.000000
233 750.500000 750.500000 160.020004 0.000000
234 762.520020 762.520020 159.839996 0.000000
235 759.109985 759.109985 160.350006 0.000000
236 771.190002 771.190002 164.789993 61.369999
237 112.120003 776.419983 165.360001 61.009998
238 113.949997 789.289978 166.520004 61.970001
239 113.300003 789.270020 165.500000 62.169998
240 115.190002 796.099976 168.289993 62.980000
241 115.190002 797.070007 168.509995 62.680000
242 115.820000 797.849976 168.020004 62.580002
243 115.970001 790.799988 166.729996 62.299999
244 116.639999 794.200012 166.679993 63.619999
245 116.949997 796.419983 167.600006 63.540001
246 117.059998 794.559998 167.330002 63.540001
247 116.290001 791.260010 167.059998 63.549999
248 116.519997 789.909973 166.710007 63.240002
249 117.260002 791.549988 167.139999 63.279999
250 116.760002 785.049988 166.190002 62.990002
251 116.730003 782.789978 166.600006 62.900002
252 115.820000 771.820007 165.990005 62.139999

252 rows × 4 columns

loc,ilocの使い方

ixではインデックスが列名か列番号かわからない(ixは列名優先)。列名として使いたいときはloc、列番号として使いたいときはilocを使う。


In [108]:
print(df.loc[2,:])
print(df.iloc[2,:])


a    742.580017
b    742.580017
c    135.850006
d      0.000000
Name: 2, dtype: float64
a    743.619995
b    743.619995
c    135.169998
d      0.000000
Name: 3, dtype: float64

列番号で指定する。


In [110]:
df.iloc[:,2]


1      135.949997
2      135.850006
3      135.169998
4      132.860001
5      131.630005
6      133.229996
7      132.899994
8      131.169998
9      132.910004
10     130.029999
11     128.110001
12     121.860001
13     122.910004
14     122.500000
15     122.080002
16     122.589996
17     120.959999
18     122.220001
19     124.790001
20     124.830002
21     122.940002
22     124.720001
23     127.650002
24     128.570007
25     126.980003
26     124.070000
27     120.190002
28     117.849998
29     121.040001
30     122.739998
          ...    
223    159.800003
224    160.389999
225    162.770004
226    162.669998
227    161.979996
228    163.139999
229    164.520004
230    163.529999
231    162.220001
232    159.820007
233    160.020004
234    159.839996
235    160.350006
236    164.789993
237    165.360001
238    166.520004
239    165.500000
240    168.289993
241    168.509995
242    168.020004
243    166.729996
244    166.679993
245    167.600006
246    167.330002
247    167.059998
248    166.710007
249    167.139999
250    166.190002
251    166.600006
252    165.990005
Name: c, dtype: float64

isinによるSeriesからの抽出


In [5]:
obj = pd.Series(['c','a','d','a','a','b','b','c','c'])

In [6]:
mask = obj.isin(['b','c'])
mask

In [8]:
obj[mask]


Out[8]:
0    c
5    b
6    b
7    c
8    c
dtype: object
  • pandasのqueryによる抽出はSQLの説明の際に説明します。

In [ ]: