前提・実現したいこと
あるデータセットから横軸が日時で、縦軸が数値のグラフを描画しようとしています。
データセットの例はこのようになっています。
csv形式で読み込んだ時には、どちらもobject型になっておりました。
データセットに読み込むところのコード
#read csv import pandas as pd pd.set_option('display.max_columns', 8) df = pd.read_csv("sample.csv" , encoding='cp932', header=None)
他に日本語のデータも含まれており、文字化けを防ぐためにこのencodingにしてあります。
2017/1/1 8645
2017/1/2 9600
2017/1/3 0193
2017/1/4 0100
2017/1/5 8093
2017/1/6 0195
以下のようにしてobject型をdatetime64[ns]型にすることはできました。
python
1df[0] = pd.to_datetime(df[0])
発生している問題・エラーメッセージ
①まず、縦軸の数値のデータセットをobject型からint型に変換する時に以下のエラーが起こって、変換ができていません。
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-47-b8e01bf2393d> in <module>() 1 #objectをint型に ----> 2 df[4] = df[1].astype(int) ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/pandas/util/_decorators.py in wrapper(*args, **kwargs) 89 else: 90 kwargs[new_arg_name] = new_arg_value ---> 91 return func(*args, **kwargs) 92 return wrapper 93 return _deprecate_kwarg ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/pandas/core/generic.py in astype(self, dtype, copy, errors, **kwargs) 3408 # else, only a single dtype is given 3409 new_data = self._data.astype(dtype=dtype, copy=copy, errors=errors, -> 3410 **kwargs) 3411 return self._constructor(new_data).__finalize__(self) 3412 ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/pandas/core/internals.py in astype(self, dtype, **kwargs) 3222 3223 def astype(self, dtype, **kwargs): -> 3224 return self.apply('astype', dtype=dtype, **kwargs) 3225 3226 def convert(self, **kwargs): ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/pandas/core/internals.py in apply(self, f, axes, filter, do_integrity_check, consolidate, **kwargs) 3089 3090 kwargs['mgr'] = self -> 3091 applied = getattr(b, f)(**kwargs) 3092 result_blocks = _extend_blocks(applied, result_blocks) 3093 ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/pandas/core/internals.py in astype(self, dtype, copy, errors, values, **kwargs) 469 def astype(self, dtype, copy=False, errors='raise', values=None, **kwargs): 470 return self._astype(dtype, copy=copy, errors=errors, values=values, --> 471 **kwargs) 472 473 def _astype(self, dtype, copy=False, errors='raise', values=None, ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/pandas/core/internals.py in _astype(self, dtype, copy, errors, values, klass, mgr, raise_on_error, **kwargs) 519 520 # _astype_nansafe works fine with 1-d only --> 521 values = astype_nansafe(values.ravel(), dtype, copy=True) 522 values = values.reshape(self.shape) 523 ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/pandas/core/dtypes/cast.py in astype_nansafe(arr, dtype, copy) 623 elif arr.dtype == np.object_ and np.issubdtype(dtype.type, np.integer): 624 # work around NumPy brokenness, #1987 --> 625 return lib.astype_intsafe(arr.ravel(), dtype).reshape(arr.shape) 626 627 if dtype.name in ("datetime64", "timedelta64"): pandas/_libs/lib.pyx in pandas._libs.lib.astype_intsafe() pandas/_libs/src/util.pxd in util.set_value_at_unsafe() ValueError: invalid literal for int() with base 10: ' '
②int型になっている他のカラムとdatetime64[ns]型の時系列データを描画しようとしたところ、以下のエラーが出てしまいました。
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-35-9ffca3834b6d> in <module>() 2 x= df[1] 3 y = df[13] ----> 4 plt.scatter(x, y) 5 show() ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/matplotlib/pyplot.py in scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, hold, data, **kwargs) 3355 vmin=vmin, vmax=vmax, alpha=alpha, 3356 linewidths=linewidths, verts=verts, -> 3357 edgecolors=edgecolors, data=data, **kwargs) 3358 finally: 3359 ax._hold = washold ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/matplotlib/__init__.py in inner(ax, *args, **kwargs) 1708 warnings.warn(msg % (label_namer, func.__name__), 1709 RuntimeWarning, stacklevel=2) -> 1710 return func(ax, *args, **kwargs) 1711 pre_doc = inner.__doc__ 1712 if pre_doc is None: ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/matplotlib/axes/_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs) 4085 linewidths = rcParams['lines.linewidth'] 4086 -> 4087 offsets = np.column_stack([x, y]) 4088 4089 collection = mcoll.PathCollection( ~/.pyenv/versions/anaconda3-5.0.1/lib/python3.6/site-packages/numpy/lib/shape_base.py in column_stack(tup) 351 arr = array(arr, copy=False, subok=True, ndmin=2).T 352 arrays.append(arr) --> 353 return _nx.concatenate(arrays, 1) 354 355 def dstack(tup): TypeError: invalid type promotion
該当のソースコード
①
import pandas as pd #objectをint型に df[2]= df[2].astype(int)
②
python
1import matplotlib.pyplot as plt 2import numpy as np 3x= df[1] #datetime64[ns]型の時系列データ 4y = df[13] #int型 5plt.scatter(x, y) 6show()
試したこと
以下はデータセットではなく、配列にしてありますが、
簡易版ではエラーが起きることなくプロットすることができました。
python
1import pandas as pd 2import matplotlib.pyplot as plt 3import numpy as np 4from pylab import * 5from pylab import rcParams 6 7df_1 = ['2017-01-01', '2017-01-02', '2017-01-03'] 8df_2 = {'000', '010', '011'} 9df_1 = [pd.to_datetime(s) for s in df_1] 10df_2 = [int(s) for s in df_2] 11 12 13x= df_1 14y = df_2 15 16plt.scatter(x, y) 17show()
補足情報(FW/ツールのバージョンなど)
Python 3.6.0 :: Anaconda 4.3.0
あなたの回答
tips
プレビュー