上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

OverflowError: signed integer is greater than maximum (2017/11/23)

MatplotlibでPandasのデータをグラフにしようとすると、

OverflowError: signed integer is greater than maximum

というエラーが出るようになった。最近のPandasのアップデートが原因らしい。

とりあえず、プログラムに以下をおまじないとして加えるとエラーは解消する。

import pandas.plotting._converter as pandacnv
pandacnv.register()

参考リンク

https://stackoverflow.com/questions/47404653/pandas-0-21-0-timestamp-compatibility-issue-with-matplotlib

スポンサーサイト

Numpy配列をPandasシリーズに変換した場合の注意点 (2017/11/10)

Numpy配列を生成した後、これをPandasシリーズに変換して別の変数にしたとする。ところが、Numpy配列の要素を何かに置き換えると、別の変数であるはずのPandasシリーズのデータも置き換えられてしまう。これに注意しないと予想外の問題を起こす。

○以下のコマンドをIPythonコンソールで実行する。

import numpy as np
import pandas as pd

a = np.array([1, 2, 3])
s = pd.Series(a)
print('s =')
print(s)
print('\n')
a[0] = 4
a[1] = 5
a[2] = 6
print('sはそのままで、aの要素を置き換えると')
print('s =')
print(s)

s =
0    1
1    2
2    3
dtype: int64


sはそのままで、aの要素を置き換えると
s =
0    4
1    5
2    6
dtype: int64

ややこしいが、個々の要素ではなく、Numpy配列そのものを置き換えた場合は問題ない。

○以下のコマンドをIPythonコンソールで実行する。

import numpy as np
import pandas as pd

a = np.array([1, 2, 3])
s = pd.Series(a)
print('s =')
print(s)
print('\n')
a = np.array([4, 5, 6])
print('sはそのままで、aそのものを置き換えると')
print('s =')
print(s)

s =
0    1
1    2
2    3
dtype: int64


sはそのままで、aそのものを置き換えると
s =
0    1
1    2
2    3
dtype: int64

「ValueError: Input contains NaN, infinity or a value too large for dtype('float64').」 (2017/11/10)

Pythonで「scikit-learn」ライブラリを使用しているとき、「ValueError: Input contains NaN, infinity or a value too large for dtype('float64').」というエラーが発生することがある。データに「NaN」(非数値)、「inf」(無限大)、「-inf」(負の無限大)が含まれていると起こる。

エラーをなくすためには有効な数値に置き換える。ここでは例として「NaN」、「inf」、「-inf」を含むNumpy配列とPandasシリーズを作成し、これらを「0」で置き換えてみる。

○以下のコマンドをIPythonコンソールで実行する。

import numpy as np
import pandas as pd

a = np.array([float('nan'), float('inf'), float('-inf')])
s = pd.Series(np.array([float('nan'), float('inf'), float('-inf')]))
print('置換前')
print('a = ', a)
a[(np.isnan(a)) | (a==float("inf")) | (a==float("-inf"))] = 0.0
print('置換後')
print('a = ', a)
print('\n')
print('置換前')
print('s =')
print(s)
s[(np.isnan(s)) | (s==float("inf")) | (s==float("-inf"))] = 0.0
print('置換後')
print('s =')
print(s)

置換前
a =  [ nan  inf -inf]
置換後
a =  [ 0.  0.  0.]


置換前
s =
0    NaN
1    inf
2   -inf
dtype: float64
置換後
s =
0    0.0
1    0.0
2    0.0
dtype: float64

Pandas入門 (2017/05/30)

Pandasで私自身がよく使うものに限って簡単に説明する。

この記事は内容を随時追加する。

Pandasのインポート

import pandas as pd

DataFrame

a = pd.DataFrame([[1, 2], [3, 4], [5, 6]])
b = pd.DataFrame([[1, 2], [3, 4], [5, 6]], index=['row1', 'row2', 'row3'], columns=['col1', 'col2'])
print(a)
print(b)

   0  1
0  1  2
1  3  4
2  5  6
      col1  col2
row1     1     2
row2     3     4
row3     5     6

DataFrameの要素へのアクセス

a = pd.DataFrame([[1, 2], [3, 4], [5, 6]])
print(a)
print(a.iloc[1, 1])

   0  1
0  1  2
1  3  4
2  5  6
4

Python標準ライブラリ入門 (2017/05/30)

Pythonの標準ライブラリで私自身がよく使うものに限って簡単に説明する。

この記事は内容を随時追加する。

datetime

datetimeのインポート

from datetime import datetime
from datetime import timedelta

str型をdatetime型に変換

a = '2017.01.01 00:00'
print(a)
print(datetime.strptime(a, '%Y.%m.%d %H:%M'))

2017.01.01 00:00
2017-01-01 00:00:00

datetime型をstr型に変換

a = datetime.strptime('2017.01.01 00:00', '%Y.%m.%d %H:%M')
print(a)
print(a.strftime('%Y.%m.%d %H:%M'))

2017-01-01 00:00:00
2017.01.01 00:00

日付の加算・減算

a = datetime.strptime('2017.01.01 00:00', '%Y.%m.%d %H:%M')
b = timedelta(minutes=5)
print(a)
print(b)
print(a + b)
print(a - b)

2017-01-01 00:00:00
0:05:00
2017-01-01 00:05:00
2016-12-31 23:55:00
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。