{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from pandas import Series,DataFrame"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# いくつかサンプルになるデータを作ります。\n",
"ser1 = Series([2,np.nan,4,np.nan,6,np.nan],\n",
" index=['Q','R','S','T','U','V'])\n",
"\n",
"# 長さを同じにします。\n",
"ser2 = Series(np.arange(len(ser1), dtype=np.float64),\n",
" index=['Q','R','S','T','U','V'])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Q 2\n",
"R NaN\n",
"S 4\n",
"T NaN\n",
"U 6\n",
"V NaN\n",
"dtype: float64"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ser1"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Q 0\n",
"R 1\n",
"S 2\n",
"T 3\n",
"U 4\n",
"V 5\n",
"dtype: float64"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ser2"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Q 2\n",
"R 1\n",
"S 4\n",
"T 3\n",
"U 6\n",
"V 5\n",
"dtype: float64"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# ser1がNaNなら、ser2の値がかえるような演算ができます。\n",
"Series(np.where(pd.isnull(ser1),ser2,ser1),index=ser1.index)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"Q 2\n",
"R 1\n",
"S 4\n",
"T 3\n",
"U 6\n",
"V 5\n",
"dtype: float64"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 同じ事を、Seriesが持つメソッドで実現できます。\n",
"ser1.combine_first(ser2)\n",
"# ser1がNaNであれば、ser2の値を使う。"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# 奇数と偶数からなるDataFrameを作ります。\n",
"dframe_odds = DataFrame({'X': [1., np.nan, 3., np.nan],\n",
" 'Y': [np.nan, 5., np.nan, 7.],\n",
" 'Z': [np.nan, 9., np.nan, 11.]})\n",
"dframe_evens = DataFrame({'X': [2., 4., np.nan, 6., 8.],\n",
" 'Y': [np.nan, 10., 12., 14., 16.]})"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"
\n",
" \n",
" \n",
" | \n",
" X | \n",
" Y | \n",
" Z | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 1 | \n",
" NaN | \n",
" 5 | \n",
" 9 | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 3 | \n",
" NaN | \n",
" 7 | \n",
" 11 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" X Y Z\n",
"0 1 NaN NaN\n",
"1 NaN 5 9\n",
"2 3 NaN NaN\n",
"3 NaN 7 11"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dframe_odds"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" X | \n",
" Y | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 2 | \n",
" NaN | \n",
"
\n",
" \n",
" 1 | \n",
" 4 | \n",
" 10 | \n",
"
\n",
" \n",
" 2 | \n",
" NaN | \n",
" 12 | \n",
"
\n",
" \n",
" 3 | \n",
" 6 | \n",
" 14 | \n",
"
\n",
" \n",
" 4 | \n",
" 8 | \n",
" 16 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" X Y\n",
"0 2 NaN\n",
"1 4 10\n",
"2 NaN 12\n",
"3 6 14\n",
"4 8 16"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dframe_evens"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"
\n",
" \n",
" \n",
" | \n",
" X | \n",
" Y | \n",
" Z | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 1 | \n",
" NaN | \n",
" NaN | \n",
"
\n",
" \n",
" 1 | \n",
" 4 | \n",
" 5 | \n",
" 9 | \n",
"
\n",
" \n",
" 2 | \n",
" 3 | \n",
" 12 | \n",
" NaN | \n",
"
\n",
" \n",
" 3 | \n",
" 6 | \n",
" 7 | \n",
" 11 | \n",
"
\n",
" \n",
" 4 | \n",
" 8 | \n",
" 16 | \n",
" NaN | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" X Y Z\n",
"0 1 NaN NaN\n",
"1 4 5 9\n",
"2 3 12 NaN\n",
"3 6 7 11\n",
"4 8 16 NaN"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 先に奇数のDataFrame、NaNなら、偶数の方をとって、2つのDataFrameをつなげてみます。\n",
"dframe_odds.combine_first(dframe_evens)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}