Pythonの変換

スポンサーリンク
日時の変換はこちらのページで確認してください。Pythonの日時
スポンサーリンク

変数の型を変換

# 整数から浮動小数点
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

タイトルケース

タイトルケースってなんだ。以下のように単語の先頭を全て大文字にすることです。普通の文章を変換するとおかしいですが、タイトルだとなるほどなと思います。
例)The New York Times, Bloomberg Customer Support
text = "This is a pen."
print(text.title())
# This Is A Pen.

カタカナ・ひらがな

jaconvというライブラリを使うといいようです。

あまり投資と関係なくなってきたので、マニュアルをどうぞ

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

分割

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
第二引数のorientindexcolumnsの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]]

 

タイトルとURLをコピーしました