変数の型を変換
data = int(float("123.456")) # 一度、浮動小数点に変換する必要がある
# 整数から浮動小数点
data = float(123)
# 浮動小数点から整数
data = int(123.45)
# 整数から文字列
data = str(123)
# 文字列から整数
data = int("123")
# 浮動小数点から文字列
data = str(123.456)
# 文字列から浮動小数点
data = int(float("123.456")) # 一度、浮動小数点に変換する必要がある
# 整数から浮動小数点
data = float(123)
# 浮動小数点から整数
data = int(123.45)
# 整数から文字列
data = str(123)
# 文字列から整数
data = int("123")
# 浮動小数点から文字列
data = str(123.456)
# 文字列から浮動小数点
data = int(float("123.456")) # 一度、浮動小数点に変換する必要がある
他の言語と同じで、intとfloat、strだけです。浮動小数点だけ注意が必要です。
文字列を変換
大文字と小文字
text = "Aaa"
# 小文字を大文字へ
print(text.upper())
# AAA
# 大文字を小文字へ
print(text.lower())
# aaa
text = "Aaa"
# 小文字を大文字へ
print(text.upper())
# AAA
# 大文字を小文字へ
print(text.lower())
# aaa
タイトルケース
タイトルケースってなんだ。以下のように単語の先頭を全て大文字にすることです。普通の文章を変換するとおかしいですが、タイトルだとなるほどなと思います。
例)The New York Times, Bloomberg Customer Support
text = "This is a pen."
print(text.title())
# This Is A Pen.
text = "This is a pen."
print(text.title())
# This Is A Pen.
カタカナ・ひらがな
あまり投資と関係なくなってきたので、マニュアルをどうぞ
jaconv
Pure-Python Japanese character interconverter for Hiragana, Katakana, Hankaku, Zenkaku and more
指定位置の文字を抜き取る
詳しくはスライスのページを見てください。
data = "abcdef"
# 最初の2文字
print(data[:2])
# ab
# 最後の2文字
print(data[-2:])
# ef
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
text = "USD.JPY"
res = text.split('.')
print(res)
# ['USD', 'JPY']
res = text.split('.')[0]
print(res)
# USD
置換
res = text.replace('.' ,'')
res = text.replace('.' ,'')
print(res)
# USDJPY
res = text.replace('.' ,'')
print(res)
# USDJPY
四捨五入、切り捨て、切り上げ
四捨五入(偶数へ丸める
指定の桁数で「丸める」関数です。偶数側と奇数側への差が同じ時は、偶数側に丸めます。
res = round(1.23456, 3)
print(res)
# 1.235
res = round(123456, -3)
print(res)
# 123000
res = round(1.23456, 3)
print(res)
# 1.235
res = round(123456, -3)
print(res)
# 123000
小数点以下を切り捨て、切り上げ
math
という標準ライブラリを使います。標準ですのでインストールは不要です。
- 切り捨て:
math.floor
- 切り上げ:
math.ceil
print(math.floor(1.23456))
print(math.ceil(1.23456))
import math
print(math.floor(1.23456))
# 1
print(math.ceil(1.23456))
# 2
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を正数にすると小数点以下の四捨五入に、負数にすると整数の桁数で四捨五入されます。
整数の場合、浮動小数点になりますので注意しましょう。
y = math.floor(x * 10 ** n) / (10 ** n)
y = math.ceil(x * 10 ** n) / (10 ** n)
y = math.floor(x * 10 ** n) / (10 ** n)
y = math.ceil(x * 10 ** n) / (10 ** 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
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
# 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)
# <class 'decimal.Decimal'>
y = float(str(Decimal(str(x)).quantize(Decimal(str(1 / 10 ** n)), rounding=ROUND_HALF_UP)))
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'>
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))
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
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 = "12345"
res = text.zfill(8)
print(res)
# 00012345
形式(フォーマット
以下は全て文字列に変換されます。
小数点をパーセントに
res = '{:.2%}'.format(text)
text = 0.98765
res = '{:.2%}'.format(text)
print(res)
# 98.77%
text = 0.98765
res = '{:.2%}'.format(text)
print(res)
# 98.77%
小数点以下を四捨五入(丸める
四捨五入ではなく偶数への丸めなので注意してください。
print('{:.3f}'.format(3.141592))
print('{:.3f}'.format(3.141592))
# 3.142
print('{:.3f}'.format(3.141592))
# 3.142
3桁ずつの位取り
print('{:,}'.format(1000000))
print('{:,}'.format(1000000))
# 1,000,000
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 = ["A", "B", "C"]
res = "".join(data)
print(res)
# ABC
res = "-".join(data)
print(res)
# A-B-C
配列の型を変換
タプルからリストに変換
data = ((1, 2, 3), (4, 5, 6))
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)]
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}
# {'Tokyo': 1, 'Osaka': 2, 'Kyoto': 3}
# dict_keys(['Tokyo', 'Osaka', 'Kyoto'])
# ['Tokyo', 'Osaka', 'Kyoto']
# ['Tokyo', 'Osaka', 'Kyoto']
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']
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}
# {'Tokyo': 1, 'Osaka': 2, 'Kyoto': 3}
print(list(data.values()))
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]
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(データフレーム)に変換
df = pd.DataFrame(data, columns = ["aaa", "bbb", "ccc"])
data = np.array([[1, 2, 3], [4, 5, 6]])
df = pd.DataFrame(data, columns = ["aaa", "bbb", "ccc"])
# リスト型
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
# リスト型
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)
df = pd.DataFrame.from_dict(data, orient='index', columns = ["aaa", "bbb", "ccc"])
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
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 = 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]]
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 = 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 = 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"]) # リスト型のデータで作成
print(df.values.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]]
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]]