Python-Pandas学習のデータフレーム(Dataframe)
10129 ワード
データフレーム(Dataframe)は、行列スタイルのデータテーブルで、ソートされた列のセットを含み、各列は異なる値タイプ(数値、文字列、ブール値など)であってもよい.
データ・フレームには、同じインデックスを共有するSeries辞書として扱われるロー・インデックスとカラム・インデックスがあります.
次に、データフレームを作成する方法と、いくつかの基本的な操作を示します.
索引オブジェクト
pandasのインデックスオブジェクトは、軸ラベルやその他のメタデータを格納するために使用され、構築時にインデックスとして配列を渡すことができます.
インデックス・オブジェクトで使用できるいくつかの方法:
append#追加のインデックスオブジェクトを元のインデックスに貼り付けると、新しいインデックスが生成されます.
difference#2つのインデックスの差セットを計算
intersection#2つのインデックスの交差を計算
union#2つのインデックスの並列セットを計算
isin#は、各値が転送コンテナ内のブール配列にあるかどうかを示します.
delete#位置iの要素を削除し、新しいインデックスを生成
insert#は、位置iに要素を挿入し、新しいインデックスを生成します.
is_monotonic#インデックスシーケンスが増分された場合はTrueを返します
is_Unique#インデックス・シーケンスが一意の場合はTrueを返します.
Unique#インデックスの一意値シーケンスを計算する
DataFrame索引オプション
DataFrameのいくつかの加減算などの方法では、演算子操作を直接使用すると、いくつかのNaN値が表示されます.例えば、df 1には「b」という列があり、df 2には「b」という列がない場合、df 1+df 2を使用すると、2つのデータフレームがマージされますが、中の「b」列はいずれもNaN値です.この場合がないように、データフレームに付属するいくつかの方法を呼び出すことができます.追加のパラメータfill_を渡しますvalue、入力する値を設定してNaNを置き換えます.
Dataframeの適用とマッピング方法
適用とマッピングの方法はそれぞれapply,mapであり,以下に例を示す.
DataFrameのソートとランキング方法:
ソートで使用できるsort_index ,sort_values、ランキングはrankを使用できます.
場合によっては、Dataframeでインデックスが重複する場合、すなわち軸インデックスが等しいか、または複数同時に現れる場合があります.is_を使用します.Uniqueは、重複するインデックスが存在するか否かを判断する:df.inde.is_Unique、これはTrueまたはFalseを返します.
インデックスが重複している場合、私たちが値を取ると、このインデックスの行はすべて取り出され、結果はdfを返しますが、一意のインデックスだけがある場合は、単一の数値またはシーケンスを返します.
DataFrame記述統計の概要と計算
私たちが前に言ったapplyのように、実はDFにはすでに多くの関数があります.例えば、和を求める、平均値を求める、分散を求めるなど、基本的な統計方法が含まれています.
データ・フレームには、同じインデックスを共有するSeries辞書として扱われるロー・インデックスとカラム・インデックスがあります.
次に、データフレームを作成する方法と、いくつかの基本的な操作を示します.
import pandas as pd
data = {
'platform': ['qq', 'weixin', 'weibo', 'taobao'],
'year': [2000, 2010, 2005, 2004],
'percent': [0.71, 0.89, 0.63, 0.82]
}
df = pd.DataFrame(data)
print(df)
#
platform year percent
0 qq 2000 0.71
1 weixin 2010 0.89
2 weibo 2005 0.63
3 taobao 2004 0.82
# excel ,
print(df.head()) # ,
#
data = {
'platform': ['qq', 'weixin', 'weibo', 'taobao'],
'year': [2000, 2010, 2005, 2004],
'percent': [0.71, 0.89, 0.63, 0.82]
}
columns = ['year', 'platform', 'percent']
df = pd.DataFrame(data, columns=columns) #
print(df)
#
year platform percent
0 2000 qq 0.71
1 2010 weixin 0.89
2 2005 weibo 0.63
3 2004 taobao 0.82
# , NaN
data = {
'platform': ['qq', 'weixin', 'weibo', 'taobao'],
'year': [2000, 2010, 2005, 2004],
'percent': [0.71, 0.89, 0.63, 0.82]
}
columns = ['year', 'platform', 'percent', 'count']
index = ['a', 'b', 'c', 'd']
df = pd.DataFrame(data, columns=columns, index=index) # , NaN
print(df)
#
year platform percent count
a 2000 qq 0.71 NaN
b 2010 weixin 0.89 NaN
c 2005 weibo 0.63 NaN
d 2004 taobao 0.82 NaN
print(df['year']) # , Series
#
a 2000
b 2010
c 2005
d 2004
Name: year, dtype: int64
print(df.platform) # .
#
a qq
b weixin
c weibo
d taobao
Name: platform, dtype: object
print(df.loc['a']) # index ‘a’
#
year 2000
platform qq
percent 0.71
count NaN
Name: a, dtype: object
# ‘count’ NaN,
df['count'] = 5000
print(df)
#
year platform percent count
a 2000 qq 0.71 5000
b 2010 weixin 0.89 5000
c 2005 weibo 0.63 5000
d 2004 taobao 0.82 5000
# , , , ,
df['count'] = [x*1000 for x in range(1, 5)]
print(df)
#
year platform percent count
a 2000 qq 0.71 1000
b 2010 weixin 0.89 2000
c 2005 weibo 0.63 3000
d 2004 taobao 0.82 4000
# , index, index, NaN
ser = pd.Series([1000, 3000], index=['a', 'c'])
df['count'] = ser
print(df)
#
year platform percent count
a 2000 qq 0.71 1000.0
b 2010 weixin 0.89 NaN
c 2005 weibo 0.63 3000.0
d 2004 taobao 0.82 NaN
#
df['check'] = df.platform == 'weixin'
print(df)
#
year platform percent count check
a 2000 qq 0.71 NaN False
b 2010 weixin 0.89 NaN True
c 2005 weibo 0.63 NaN False
d 2004 taobao 0.82 NaN False
#
del df['check']
print(df)
#
year platform percent count
a 2000 qq 0.71 NaN
b 2010 weixin 0.89 NaN
c 2005 weibo 0.63 NaN
d 2004 taobao 0.82 NaN
# , , , , ,
# T
df = df.T
print(df)
#
a b c d
year 2000 2010 2005 2004
platform qq weixin weibo taobao
percent 0.71 0.89 0.63 0.82
count NaN NaN NaN NaN
#
df.index.name = 'hello'
df.columns.name = 'world'
print(df)
#
world year platform percent count
hello
a 2000 qq 0.71 NaN
b 2010 weixin 0.89 NaN
c 2005 weibo 0.63 NaN
d 2004 taobao 0.82 NaN
# values , :
print(df.values)
#
[[2000 'qq' 0.71 nan]
[2010 'weixin' 0.89 nan]
[2005 'weibo' 0.63 nan]
[2004 'taobao' 0.82 nan]]
索引オブジェクト
pandasのインデックスオブジェクトは、軸ラベルやその他のメタデータを格納するために使用され、構築時にインデックスとして配列を渡すことができます.
obj = pd.Series(range(3), index=['a', 'b', 'c'])
index = obj.index
print(index)
#
Index(['a', 'b', 'c'], dtype='object')
print(index[1:])
#
Index(['b', 'c'], dtype='object')
# ,
# , index=['a', 'b', 'c', 'a']
インデックス・オブジェクトで使用できるいくつかの方法:
append#追加のインデックスオブジェクトを元のインデックスに貼り付けると、新しいインデックスが生成されます.
difference#2つのインデックスの差セットを計算
intersection#2つのインデックスの交差を計算
union#2つのインデックスの並列セットを計算
isin#は、各値が転送コンテナ内のブール配列にあるかどうかを示します.
delete#位置iの要素を削除し、新しいインデックスを生成
insert#は、位置iに要素を挿入し、新しいインデックスを生成します.
is_monotonic#インデックスシーケンスが増分された場合はTrueを返します
is_Unique#インデックス・シーケンスが一意の場合はTrueを返します.
Unique#インデックスの一意値シーケンスを計算する
DataFrame索引オプション
# df Dataframe
# df :
df[val]
# df :
df.loc[val]
# df
df.loc[[val1, val2, val3]]
# df
df.loc[:, val]
# df
df.loc[:, [val1, val2, val2]]
#
df.loc[row, col]
#
df.iloc[where]
#
df.iloc[:, where]
#
df.iloc[where_row, where_col]
# 、
df.at[label_row, label_col]
# 、
df.iat[row, col]
# ,
reindex()
#
get_value, set_value
DataFrameのいくつかの加減算などの方法では、演算子操作を直接使用すると、いくつかのNaN値が表示されます.例えば、df 1には「b」という列があり、df 2には「b」という列がない場合、df 1+df 2を使用すると、2つのデータフレームがマージされますが、中の「b」列はいずれもNaN値です.この場合がないように、データフレームに付属するいくつかの方法を呼び出すことができます.追加のパラメータfill_を渡しますvalue、入力する値を設定してNaNを置き換えます.
add, radd # (+)
sub, rsub # (-)
div, rdiv # (/)
floordiv, rfloordiv # (//)
mul, rmul # (*)
pow, rpow # (**)
# r , , , df.rdiv(1) 1/df
Dataframeの適用とマッピング方法
適用とマッピングの方法はそれぞれapply,mapであり,以下に例を示す.
#apply
#np Numpy
import pandas as pd
import numpy as np
df = pd.DataFrame(
np.random.randn(4, 3),
columns=list('bde'),
index=['hello', 'world', 'year', 'month']
)
print(df)
#
b d e
hello -0.057626 -0.312814 -0.501929
world -1.574264 0.802262 1.518332
year 0.090305 -0.154119 -2.288428
month -1.296728 -0.508496 -0.290008
fdif = lambda x:x.max() - x.min() # ,
print(df.apply(fdif)) # Dataframe , axis
#
b 1.664569
d 1.310758
e 3.806759
dtype: float64
def tempfunc(x):
return pd.Series([x.min(), x.max()], index =['min', 'max'])
print(df.apply(tempfunc)) # dataframe
#
b d e
min -0.458097 -0.590140 -1.038616
max 0.246472 0.900312 1.667914
# , applymap ,
format = lambda x: '%.2f' % x #
print(df.applymap(format))
#
b d e
hello 0.47 1.48 -0.60
world 1.15 1.52 -1.07
year -1.39 1.79 -0.33
month 0.06 -1.90 -1.18
# applymap , Series map , map
print(df['e'].map(format)) #
#
hello -1.41
world -0.67
year -0.84
month 0.35
Name: e, dtype: object
DataFrameのソートとランキング方法:
ソートで使用できるsort_index ,sort_values、ランキングはrankを使用できます.
ser = pd.Series(range(4), index=list('dabc'))
print(ser)
#
d 0
a 1
b 2
c 3
dtype: int64
print(ser.sort_index()) # index
#
a 1
b 2
c 3
d 0
dtype: int64
# ,dataframe
df = pd.DataFrame([[0, 1, 2, 3], [4, 5, 6, 7]], index=['three', 'one'], columns=list('dabc'))
print(df)
#
d a b c
three 0 1 2 3
one 4 5 6 7
print(df.sort_index()) # index
#
d a b c
one 4 5 6 7
three 0 1 2 3
print(df.sort_index(axis=1)) #
#
a b c d
three 1 2 3 0
one 5 6 7 4
print(df.sort_index(axis=1, ascending=False)) # ,
#
d c b a
three 0 3 2 1
one 4 7 6 5
print(df.sort_values(by='b', ascending=False)) # , ,by
#
d a b c
one 4 5 6 7
three 0 1 2 3
# rank
df = pd.DataFrame({ # DF
'b': [4.3, 7, -3, 2],
'a': [1, 0, 1, 0],
'c': [-2, 4, 8, -2.5]
})
print(df)
#
b a c
0 4.3 1 -2.0
1 7.0 0 4.0
2 -3.0 1 8.0
3 2.0 0 -2.5
print(df.rank(axis='columns')) # rank ,
#
b a c
0 3.0 2.0 1.0
1 3.0 1.0 2.0
2 1.0 2.0 3.0
3 3.0 2.0 1.0
#rank method , , :
'average' # :
'min' #
'max' #
'first' # , , , ,
'dense' # ‘min’, 1,
場合によっては、Dataframeでインデックスが重複する場合、すなわち軸インデックスが等しいか、または複数同時に現れる場合があります.is_を使用します.Uniqueは、重複するインデックスが存在するか否かを判断する:df.inde.is_Unique、これはTrueまたはFalseを返します.
インデックスが重複している場合、私たちが値を取ると、このインデックスの行はすべて取り出され、結果はdfを返しますが、一意のインデックスだけがある場合は、単一の数値またはシーケンスを返します.
DataFrame記述統計の概要と計算
私たちが前に言ったapplyのように、実はDFにはすでに多くの関数があります.例えば、和を求める、平均値を求める、分散を求めるなど、基本的な統計方法が含まれています.