変数の型を変換
# 整数から浮動小数点 data = float(123) # 浮動小数点から整数 data = int(123.45) # 整数から文字列 data = str(123) # 文字列から整数 data = int("123") # 浮動小数点から文字列 data = str(123.456) # 文字列から浮動小数点 data = int(float("123.456")) # 一度、浮動小数点に変換する必要がある
文字列を変換
大文字と小文字
text = "Aaa" # 小文字を大文字へ print(text.upper()) # AAA # 大文字を小文字へ print(text.lower()) # aaa
タイトルケース
text = "This is a pen." print(text.title()) # This Is A Pen.
カタカナ・ひらがな
jaconv
というライブラリを使うといいようです。
あまり投資と関係なくなってきたので、マニュアルをどうぞ
指定位置の文字を抜き取る
詳しくはスライスのページを見てください。
data = "abcdef" # 最初の2文字 print(data[:2]) # ab # 最後の2文字 print(data[-2:]) # ef
分割
text = "USD.JPY" res = text.split('.') print(res) # ['USD', 'JPY'] res = text.split('.')[0] print(res) # USD
置換
res = text.replace('.' ,'') print(res) # USDJPY
四捨五入、切り捨て、切り上げ
四捨五入(偶数へ丸める
指定の桁数で「丸める」関数です。偶数側と奇数側への差が同じ時は、偶数側に丸めます。
res = round(1.23456, 3) print(res) # 1.235 res = round(123456, -3) print(res) # 123000
小数点以下を切り捨て、切り上げ
math
という標準ライブラリを使います。標準ですのでインストールは不要です。
- 切り捨て:
math.floor
- 切り上げ:
math.ceil
import math print(math.floor(1.23456)) # 1 print(math.ceil(1.23456)) # 2
指定桁数で切り捨て、切り上げ
Pythonには指定桁数での切り上げ、切り捨ての関数がありませんので、自分で作るしか方法がないです。
上記と同じmath
を使用しますが、少しやりくりが必要です。
- 切り捨て:
math.floor(x * 10 ** n) / (10 ** n)
- 切り上げ:
math.ceil(x * 10 ** n) / (10 ** n)
10 ** n
は10のn乗という意味ですが、値を切り捨てまたは切り上げる桁数まで乗算しているということです。
そして、整数で切り捨てまたは切り上げて、また指定桁数で割算しています。
nを正数にすると小数点以下の四捨五入に、負数にすると整数の桁数で四捨五入されます。
整数の場合、浮動小数点になりますので注意しましょう。
import math n = 2 # 切り捨てしたい桁 x = 1.23456 y = math.floor(x * 10 ** n) / (10 ** n) print(y) # 1.23 y = math.ceil(x * 10 ** n) / (10 ** n) print(y) # 1.24 n = -2 # 切り捨てしたい桁 x = 123456 y = math.floor(x * 10 ** n) / (10 ** n) print(y) # 123400.0 y = math.ceil(x * 10 ** n) / (10 ** n) print(y) # 123500.0
小数点を指定桁数で四捨五入
Pythonには四捨五入の関数がありませんので、自分で作るしか方法がないです。
decimal
という標準ライブラリを使います。標準ですのでインストールは不要です。
ちょっと面倒です。以下は多少順を追って説明していますが、結論は以下です。
y = float(str(Decimal(str(x)).quantize(Decimal(str(1 / 10 ** n)), rounding=ROUND_HALF_UP)))
ざっくりの説明ですが、Decimal
で四捨五入して、それを文字列に変換、そしてに浮動小数点に変換しているということです。str(1 / 10 ** n)
は指定桁数にしています。例えば第二位であれば、0.01となるようにしています。
from decimal import Decimal, ROUND_HALF_UP x = 1.23456 n = 3 # 四捨五入したい桁 # Decimal(str(val)).quantize(Decimal('0.001'), rounding=ROUND_HALF_UP) y = Decimal(str(x)).quantize(Decimal(str(1 / 10 ** n)), rounding=ROUND_HALF_UP) print(y) # 1.235 print(type(y)) # <class 'decimal.Decimal'> y2 = float(str(y)) print(y2) # 1.235 print(type(y2)) # <class 'float'> y = float(str(Decimal(str(x)).quantize(Decimal(str(1 / 10 ** n)), rounding=ROUND_HALF_UP))) print(y) # 1.235 print(type(y)) # <class 'float'>
整数を指定桁数で四捨五入
上記の小数点の四捨五入と基本的には同じですが、nをマイナスにするとquantize(Decimalのところが整数になりますがそれに対応していません。2桁の場合は100ではなく1E2とする必要があります。
y = int(Decimal(x).quantize(Decimal('1E' + str(n)), rounding=ROUND_HALF_UP))
import math x = 123456 n = 3 # 四捨五入したい桁 y = int(Decimal(x).quantize(Decimal('1E' + str(n)), rounding=ROUND_HALF_UP)) print(y) # 123000
ゼロ埋め(ゼロパディング)
text = "12345" res = text.zfill(8) print(res) # 00012345
形式(フォーマット
以下は全て文字列に変換されます。
小数点をパーセントに
text = 0.98765 res = '{:.2%}'.format(text) print(res) # 98.77%
小数点以下を四捨五入(丸める
四捨五入ではなく偶数への丸めなので注意してください。
print('{:.3f}'.format(3.141592)) # 3.142
3桁ずつの位取り
print('{:,}'.format(1000000)) # 1,000,000
リストや辞書の要素
結合または変換して文字列に
data = ["A", "B", "C"] res = "".join(data) print(res) # ABC res = "-".join(data) print(res) # A-B-C
配列の型を変換
タプルからリストに変換
data = (1, 2, 3, 4, 5) print(list(data)) # [1, 2, 3, 4, 5] data = ((1, 2, 3), (4, 5, 6)) print(list(data)) # [(1, 2, 3), (4, 5, 6)]
辞書型(Dict)からリスト型に変換
辞書型のキーをリストに変換
.keys()
を使用します。そのままだと辞書型になっていますのでlist()
でリスト型に変換します。
または、list()
とダイレクトに変換してもキーを取得することができます。
data = {"Tokyo":1, "Osaka":2, "Kyoto":3} print(data) # {'Tokyo': 1, 'Osaka': 2, 'Kyoto': 3} print(data.keys()) # dict_keys(['Tokyo', 'Osaka', 'Kyoto']) print(list(data.keys())) # ['Tokyo', 'Osaka', 'Kyoto'] print(list(data)) # ['Tokyo', 'Osaka', 'Kyoto']
辞書型の値をリストに変換
.values()
を使用します。そのままだと辞書型になっていますのでlist()
でリスト型に変換します。
data = {"Tokyo":1, "Osaka":2, "Kyoto":3} print(data) # {'Tokyo': 1, 'Osaka': 2, 'Kyoto': 3} print(data.values()) # dict_values([1, 2, 3]) print(list(data.values())) # [1, 2, 3]
リスト型またはNumpyからPandas(データフレーム)に変換
# リスト型 data = [[1,2,3],[4,5,6]] print(data) # [[1, 2, 3], [4, 5, 6]] df = pd.DataFrame(data, columns = ["aaa", "bbb", "ccc"]) print(df) # aaa bbb ccc # 0 1 2 3 # 1 4 5 6 # Numpy data = np.array([[1, 2, 3], [4, 5, 6]]) print(data) # [[1 2 3] # [4 5 6]] df = pd.DataFrame(data, columns = ["aaa", "bbb", "ccc"]) print(df) # aaa bbb ccc # 0 1 2 3 # 1 4 5 6
辞書型(Dict)からPandas(データフレーム)に変換
data = {"Tokyo":[1,2,3], "Osaka":[4,5,6], "Kyoto":[7,8,9]} df = pd.DataFrame.from_dict(data) print(df) # Tokyo Osaka Kyoto # 0 1 4 7 # 1 2 5 8 # 2 3 6 9 df = pd.DataFrame.from_dict(data, orient='index', columns = ["aaa", "bbb", "ccc"]) print(df) # aaa bbb ccc # Tokyo 1 2 3 # Osaka 4 5 6 # Kyoto 7 8 9
orient
はindex
かcolumns
の2択です。省略された場合はcolumns
となります。Pandas(データフレーム)からNumpyに変換
df = pd.DataFrame([[1,2,3],[4,5,6]], columns = ["aaa", "bbb", "ccc"]) # リスト型のデータで作成 df = df.set_index('aaa') print(df) # bbb ccc # aaa # 1 2 3 # 4 5 6 print(df.values) # [[2 3] # [5 6]]
Pandas(データフレーム)からリストに変換
特定のカラムだけ
df = pd.DataFrame([[1,2,3],[4,5,6]], columns = ["aaa", "bbb", "ccc"]) # リスト型のデータで作成 df = df.set_index('aaa') print(df) # bbb ccc # aaa # 1 2 3 # 4 5 6 print(df.bbb.tolist()) # [2, 5]
全てのカラム
df.values
で一旦Numpyに変換して、それに.tolist()
でリストに変換します。
df = pd.DataFrame([[1,2,3],[4,5,6]], columns = ["aaa", "bbb", "ccc"]) # リスト型のデータで作成 df = df.set_index('aaa') print(df) # bbb ccc # aaa # 1 2 3 # 4 5 6 print(df.values.tolist()) # [[2, 3], [5, 6]]