DataFramesとは?
コード
まず下記のコードで簡単DataFrameを作って見ます。乱数で5x4のTableを作り、RowsのIndexはABCDEでColumnsはWXYZ。
import pandas as pd import numpy as np from numpy.rand import randn np.random.seed(seed=101) df=pd.DataFrame(randn(5,4), ['A','B','C','D','E'], ['W','X','Y','Z'] )
じゃ、ColumnsはどんなObject?
type(df['W']) type(df) pandas.core.series.Series pandas.core.frame.DataFrame
下記はW Columnをとってみます。そのときはSeriesが戻ってきます。
df['W'] A 0.221491 B -0.538235 C -0.905100 D -0.866885 E -1.115710 Name: W, dtype: float64
こっちも同じW Columnsを取りますがおすすめません。そのやり方だといまMethodをCallするかColumnをCallしてるかが混乱になりますし、もとPandasに中にあるLibraryをOverwriteする可能性もあります。
df.W A 0.221491 B -0.538235 C -0.905100 D -0.866885 E -1.115710 Name: W, dtype: float64
複数のColumnsも取れます。Listを入れればOKです。
df[['W','Y']]
これは実際jupyterで出力されたTableです。WとYだけの”DataFrame”が戻ってきます。
W | Y | |
---|---|---|
A | 0.221491 | 1.541990 |
B | -0.538235 | 1.407338 |
C | -0.905100 | 1.028293 |
D | -0.866885 | -1.223082 |
E | -1.115710 | -1.329660 |
新しいColumnを追加するには?
df['new']=df['W']+df['Y']
これは実際jupyterで出力されたTableです。新しいColumn”new”が追加されました。Columnの値はColumnW+ColumnYです。
W | X | Y | Z | new | |
---|---|---|---|---|---|
A | 0.221491 | -0.855196 | 1.541990 | 0.666319 | 1.763481 |
B | -0.538235 | -0.568581 | 1.407338 | 0.641806 | 0.869104 |
C | -0.905100 | -0.391157 | 1.028293 | -1.972605 | 0.123193 |
D | -0.866885 | 0.720788 | -1.223082 | 1.606780 | -2.089967 |
E | -1.115710 | -1.385379 | -1.329660 | 0.041460 | -2.445370 |
既存Columnを削除するには?削除する方法は、columnsを直接指定するのか、columnsのKeyとaxis=1を入れるのか。axis=0はIndexベースでaxis=1はcolumnsです。ちなみにDefaultは0です。あと注意するのはinplace=Trueです。DataFrameの中に大部のMethodsもこのinplaceのDefault値がFalseでそうするとColumnが一応削除したように見えますが実際はやってません。これは誤りの操作でDataが変更されてしまうことを予防です。
df.drop(columns='new',inplace=True) df.drop('new',axis=1,inplace=True)
これは実際jupyterで出力されたTableです。先追加したColumn”new”が削除されました。
W | X | Y | Z | |
---|---|---|---|---|
A | 0.221491 | -0.855196 | 1.541990 | 0.666319 |
B | -0.538235 | -0.568581 | 1.407338 | 0.641806 |
C | -0.905100 | -0.391157 | 1.028293 | -1.972605 |
D | -0.866885 | 0.720788 | -1.223082 | 1.606780 |
E | -1.115710 | -1.385379 | -1.329660 | 0.041460 |
ですが…なんでColumnsのAxisは1でRowsのAxisは0ですか?
DataFrameはIndexでAWとか、WCとかなどのCellをMarkingするだけからです。
df.shape (5, 4)
Rowを取ります。まずはKeyから。
df.loc['A'] W 0.221491 X -0.855196 Y 1.541990 Z 0.666319 Name: A, dtype: float64
今度はIndexから取ります。
df.iloc[0] W 0.221491 X -0.855196 Y 1.541990 Z 0.666319 Name: A, dtype: float64
特定なCellを取ります。操作はエクセルと同じです。
#AW df.loc['A','W'] #BZ df.loc['B','Z'] 0.22149068500354543 0.6418055114450044
それじゃねー