いろいろ


```
import pandas as pd
 
df = pd.DataFrame({
        'A' : [1, 2, 2, 3, 3,None,5],
        'B' : [1, 1, 2, 2, None,4,5]
    })
 
print df
print '------------------------'
print df.loc[df.A.isnull(), :]     #Aがnullの行を表示
print '------------------------'
print df.loc[df.B.isnull(), :]     #Bがnullの行を表示
print '------------------------'
print df.loc[df.A.notnull(), :]    #Aがnull以外の行を表示
print '------------------------'
print df.loc[df.B.notnull(), :]    #Bがnull以外の行を表示
```

```
     A    B
0  1.0  1.0
1  2.0  1.0
2  2.0  2.0
3  3.0  2.0
4  3.0  NaN
5  NaN  4.0
6  5.0  5.0
------------------------
    A    B
5 NaN  4.0
------------------------
     A   B
4  3.0 NaN
------------------------
     A    B
0  1.0  1.0
1  2.0  1.0
2  2.0  2.0
3  3.0  2.0
4  3.0  NaN
6  5.0  5.0
------------------------
     A    B
0  1.0  1.0
1  2.0  1.0
2  2.0  2.0
3  3.0  2.0
5  NaN  4.0
6  5.0  5.0
```

```
num = [10, 20, 30, 20, 5, 3]
 
print(sum(num))
print(sum(num, 1000))//開始値を指定できる
88
1088
```
pandas

```
In [3]: df1 = DataFrame({'key': ['a', 'b', 'a', 'b', 'c', 'a'],
   ...:                  'data1': range(6)})

In [9]: df2 = DataFrame({'key': ['a', 'b', 'd'],
                 'data2': range(3)})

In [6]: df1
Out[6]:
   data1 key
0      0   a
1      1   b
2      2   a
3      3   b
4      4   c
5      5   a

In [11]: df2
Out[11]:
   data2 key
0      0   a
1      1   b
2      2   d
```
mergeすると

```
In [10]: pd.merge(df1, df2)
Out[10]:
   data1 key  data2
0      0   a      0
1      2   a      0
2      5   a      0
3      1   b      1
4      3   b      1
```
共通の同じ列名で結合される
(何も指定しない場合inner joinになる)

pd.merge(df1,df2,how='inner')と同じ

onでマージする列名を指定することもできます。
これも上記と同じになります。

```
In [12]: pd.merge(df1, df2, on='key')
Out[12]:
   data1 key  data2
0      0   a      0
1      2   a      0
2      5   a      0
3      1   b      1
4      3   b      1
```
列名が異なるDataFrameを結合する場合

```
In [15]: df3 = DataFrame({'key03': ['a', 'b', 'a', 'b', 'c', 'a'],
                 'data1': range(6)})

In [16]: df4 = DataFrame({'key04': ['a', 'b', 'd'],
                 'data2': range(3)})

In [17]: df3
Out[17]:
   data1 key03
0      0     a
1      1     b
2      2     a
3      3     b
4      4     c
5      5     a

In [18]: df4
Out[18]:
   data2 key04
0      0     a
1      1     b
2      2     d
```
left_onとlight_onでマージする列を指定する

```
In [19]: pd.merge(df3, df4, left_on='key03', right_on='key04')
Out[19]:
   data1 key03  data2 key04
0      0     a      0     a
1      2     a      0     a
2      5     a      0     a
3      1     b      1     b
4      3     b      1     b
```
howにleftを指定すると左外部結合

```
In [22]: pd.merge(df1, df2, how='left')
Out[22]:
   data1 key  data2
0      0   a      0
1      1   b      1
2      2   a      0
3      3   b      1
4      4   c    NaN
5      5   a      0
```

howにrightを指定すると右外部結合

```
In [23]: pd.merge(df1, df2, how='right')
Out[23]:
   data1 key  data2
0      0   a      0
1      2   a      0
2      5   a      0
3      1   b      1
4      3   b      1
5    NaN   d      2
```

outer join
howにouterを指定すると完全外部結合になる

```
In [24]: pd.merge(df1, df2, how='outer')
Out[24]:
   data1 key  data2
0      0   a      0
1      2   a      0
2      5   a      0
3      1   b      1
4      3   b      1
5      4   c    NaN
6    NaN   d      2
```

下記のようなDataFrameで複数キーでマージする場合
```
In [34]: df5 = DataFrame({'keyA': ['A', 'A', 'B'],
                 'keyB': ['one', 'two', 'two'],
                 'key5': range(1, 4)})

In [35]: df6 = DataFrame({'keyA': ['A', 'A', 'B', 'B'],
                 'keyB': ['one','one',  'two', 'two'],
                 'key6': range(4, 8)})

In [36]: df5
Out[36]:
   key5 keyA keyB
0     1    A  one
1     2    A  two
2     3    B  two

In [37]: df6
Out[37]:
   key6 keyA keyB
0     4    A  one
1     5    A  one
2     6    B  two
3     7    B  two
```
onに列名のリストを渡す
デフォルトはinner join

```
In [38]: pd.merge(df5, df6, on=['keyA', 'keyB'])
Out[38]:
   key5 keyA keyB  key6
0     1    A  one     4
1     1    A  one     5
2     3    B  two     6
3     3    B  two     7
```