通常のデータフレームの条件抽出と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
どのような仕組みか
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
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を使うと良い。条件抽出し、抽出されなかったものを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
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
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
In [ ]: