DataFrameコンストラクターは、ndarray、辞書などのデータオブジェクトを受け入れます。
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
しかし、データで辞書を渡す場合、シリーズ、配列、リストなどの値フィールドにオブジェクトのようなリストを含める必要があります。
# Dictionary with list object in values
studentData = {
'name' : ['jack', 'Riti', 'Aadi'],
'age' : [34, 30, 16],
'city' : ['Sydney', 'Delhi', 'New york']
}
この種類のディクショナリでDataFrameオブジェクトを初期化すると、ディクショナリの各アイテム(キー/値のペア)は1つの列に変換されます。つまり、キーは列名になり、値フィールドのリストは列データになります。
'''
Pass dictionary in Dataframe constructor to create a new object
keys will be the column names and lists in values will be column data
'''
dfObj = pd.DataFrame(studentData)
このようなDataFrameオブジェクトを作成し、
age city name
0 34 Sydney jack
1 30 Delhi Riti
2 16 New york Aadi
辞書のすべてのキーは列名に変換され、各値フィールドのリストは列データに変換されます。
カスタムインデックスを使用して辞書からDataFrameを作成する
デフォルトのインデックスリストを置き換えるために、インデックスリストをDataFrameコンストラクタに渡すこともできます。
# Pass custom names of index as list during initialization
dfObj = pd.DataFrame(studentData, index=['a', 'b', 'c'])
このようなDataFrameオブジェクトを作成し、
age city name
a 34 Sydney jack
b 30 Delhi Riti
c 16 New york Aadi
互換性のない辞書からDataFrameを作成します
DataFrameコンストラクターは、値にオブジェクトのようなリストを含むディクショナリを受け入れるため。しかし、値のリストを持たない辞書がある場合はどうなりますか
Python
studentAgeData = {
'Jack' : 12,
'Roma' : 13,
'Ritika' : 10,
'Aadi' : 11
}
このディクショナリをDataFrameコンストラクターに直接渡すと、次のエラーValueErrorがスローされます。
すべてのスカラー値を使用する場合は、インデックスを渡す必要があります
したがって、この種のディクショナリから2列のDataFrameオブジェクトを作成し、すべてのキーと値をこれらの個別の列として配置する方法は、
0 1
a Roma 13
b Jack 12
c Aadi 11
d Ritika 10
そのために、この辞書からタプル(キー/値)のリストを作成し、リストを受け入れる別のデータフレームコンストラクターに渡します。
'''
Creating dataframe by converting dict to list of items
'''
dfObj = pd.DataFrame(list(studentAgeData.items()), index=['a', 'b', 'c', 'd'])
このようなDataFrameオブジェクトを作成し、
0 1
a Roma 13
b Jack 12
c Aadi 11
d Ritika 10
辞書からDataFrameを作成し、データをスキップします
ただし、いくつかの項目をスキップして、辞書からDataFrameオブジェクトを作成します。その方法を見てみましょう、
このような辞書があるとします。
# Dictionary with list object in values
studentData = {
'name' : ['jack', 'Riti', 'Aadi'],
'age' : [34, 30, 16],
'city' : ['Sydney', 'Delhi', 'New york']
}
キー'age'のアイテムをスキップして、これからDataFrameを作成します。
# Creating Dataframe from Dictionary by Skipping 2nd Item from dict
dfObj = pd.DataFrame(studentData, columns=['name', 'city'])
columnsパラメーターのように、2つの列名のみのリストを提供しました。したがって、DataFrameには2列のみを含める必要があります。
name city
0 jack Sydney
1 Riti Delhi
2 Aadi New york
異なる方向の辞書からDataFrameを作成します
DataFrame.from_dict()関数も使用して、辞書からDataFrameを作成できます。
DataFrame.from_dict(data, orient='columns', dtype=None)
辞書とオリエンテーションも受け入れます。デフォルトの方向は列です。これは、辞書のキーがDataFrameの作成中に列として使用されることを意味します。
方向を「インデックス」として渡すこともできます。これにより、デフォルトの方向が変更され、辞書のキーがインデックスになります。つまり、
studentData = {
'name' : ['jack', 'Riti', 'Aadi'],
'age' : [34, 30, 16],
'city' : ['Sydney', 'Delhi', 'New york']
}
方向がインデックスのDataFrameを作成します。すなわち
# Create dataframe from dic and make keys, index in dataframe
dfObj = pd.DataFrame.from_dict(studentData, orient='index')
このようなDataFrameオブジェクトを作成し、
0 1 2
name jack Riti Aadi
city Sydney Delhi New york
age 34 30 16
ネストされた辞書からDataFrameを作成する
ネストされた辞書、つまり
# Nested Dictionary
studentData = {
0 : {
'name' : 'Aadi',
'age' : 16,
'city' : 'New york'
},
1 : {
'name' : 'Jack',
'age' : 34,
'city' : 'Sydney'
},
2 : {
'name' : 'Riti',
'age' : 30,
'city' : 'Delhi'
}
}
3つのアイテムがあり、各アイテムには値フィールドにディクショナリが含まれ、ディクショナリには同じキーが含まれていますが、値が異なります。
DataFrameコンストラクターに直接渡すことができますが、dictのキーを列として使用し、このようにDataFrameオブジェクトが生成されます。
'''
Create dataframe from nested dictionary
'''
dfObj = pd.DataFrame(studentData)
このようなDataFrameオブジェクトを作成し、
0 1 2
age 16 34 30
city New york Sydney Delhi
name Aadi Jack Riti
次に、この行列を転置して、列をインデックスと交換します。つまり、データはこれでより読みやすくなります。
# Transpose dataframe object
dfObj = dfObj.transpose()
これで、DataFrameのコンテンツは次のようになります。
age city name
0 16 New york Aadi
1 34 Sydney Jack
2 30 Delhi Riti
完全な例は次のとおりです。
import pandas as pd
def main():
# Dictionary with list object in values
studentData = {
'name' : ['jack', 'Riti', 'Aadi'],
'age' : [34, 30, 16],
'city' : ['Sydney', 'Delhi', 'New york']
}
print('Creating Dataframe from Dictionary')
'''
Pass dictionary in Dataframe constructor to create a new object
keys will be the column names and lists in values will be column data
'''
dfObj = pd.DataFrame(studentData)
# Print data frame object on console
print(dfObj)
print('Creating Dataframe from Dictionary and Custom Indexes')
# Pass custom names of index as list during initialization
dfObj = pd.DataFrame(studentData, index=['a', 'b', 'c'])
# Print dataframe object on console
print(dfObj)
print('Creating Dataframe from non compatible Dictionary')
studentAgeData = {
'Jack' : 12,
'Roma' : 13,
'Ritika' : 10,
'Aadi' : 11
}
'''
Creating dataframe by converting dict to list of items
'''
dfObj = pd.DataFrame(list(studentAgeData.items()), index=['a', 'b', 'c', 'd'])
# Print Dataframe object on console
print(dfObj)
print('Creating Dataframe from Dictionary by Skipping data')
studentData = {
'name' : ['jack', 'Riti', 'Aadi'],
'age' : [34, 30, 16],
'city' : ['Sydney', 'Delhi', 'New york']
}
# Creating Dataframe from Dictionary by Skipping 2nd Item from dict
dfObj = pd.DataFrame(studentData, columns=['name', 'city'])
# Print Dataframe object on console
print(dfObj)
print('Creating Dataframe from Dictionary With different orientation')
# Create dataframe from dic and make keys, index in dataframe
dfObj = pd.DataFrame.from_dict(studentData, orient='index')
print(dfObj)
print('Creating Dataframe from nested Dictionary')
# Nested Dictionary
studentData = {
0 : {
'name' : 'Aadi',
'age' : 16,
'city' : 'New york'
},
1 : {
'name' : 'Jack',
'age' : 34,
'city' : 'Sydney'
},
2 : {
'name' : 'Riti',
'age' : 30,
'city' : 'Delhi'
}
}
'''
Create dataframe from nested dictionary
'''
dfObj = pd.DataFrame(studentData)
# Print Dataframe object on console
print(dfObj)
print("Transpose the dictionary")
# Transpose dataframe object
dfObj = dfObj.transpose()
print(dfObj)
if __name__ == '__main__':
main()
出力:
Creating Dataframe from Dictionary
age city name
0 34 Sydney jack
1 30 Delhi Riti
2 16 New york Aadi
Creating Dataframe from Dictionary and Custom Indexes
age city name
a 34 Sydney jack
b 30 Delhi Riti
c 16 New york Aadi
Creating Dataframe from non compatible Dictionary
0 1
a Aadi 11
b Roma 13
c Jack 12
d Ritika 10
Creating Dataframe from Dictionary by Skipping data
name city
0 jack Sydney
1 Riti Delhi
2 Aadi New york
Creating Dataframe from Dictionary With different orientation
0 1 2
age 34 30 16
name jack Riti Aadi
city Sydney Delhi New york
Creating Dataframe from nested Dictionary
0 1 2
age 16 34 30
city New york Sydney Delhi
name Aadi Jack Riti
Transpose the dictionary
age city name
0 16 New york Aadi
1 34 Sydney Jack
2 30 Delhi Riti