好文推薦:Pandas最詳細(xì)教程來了!
導(dǎo)讀:在Python中,進(jìn)行數(shù)據(jù)分析的一個主要工具就是Pandas。Pandas是Wes McKinney在大型對沖基金AQR公司工作時開發(fā)的,后來該工具開源了,主要由社區(qū)進(jìn)行維護(hù)和更新。
import pandas as pd
data={'A':['x','y','z'],'B':[1000,2000,3000],'C':[10,20,30]}
df=pd.DataFrame(data,index=['a','b','c'])
df

數(shù)據(jù),位于表格正中間的9個數(shù)據(jù)就是DataFrame的數(shù)據(jù)部分。 索引,最左邊的a、b、c是索引,代表每一行數(shù)據(jù)的標(biāo)識。這里的索引是顯式指定的。如果沒有指定,會自動生成從0開始的數(shù)字索引。 列標(biāo)簽,表頭的A、B、C就是標(biāo)簽部分,代表了每一列的名稱。
data:ndarray/字典/類似列表 | DataFrame數(shù)據(jù);數(shù)據(jù)類型可以是ndarray、嵌套列表、字典等 index:索引/類似列表 | 使用的索引;默認(rèn)值為range(n) columns:索引/類似列表 | 使用的列標(biāo)簽;默認(rèn)值為range(n) dtype:dtype | 使用(強(qiáng)制)的數(shù)據(jù)類型;否則通過推導(dǎo)得出;默認(rèn)值為None copy:布爾值 | 從輸入復(fù)制數(shù)據(jù);默認(rèn)值為False
二維ndarray:可以自行指定索引和列標(biāo)簽 嵌套列表或者元組:類似于二維ndarray 數(shù)據(jù)、列表或元組組成的字典:每個序列變成一列。所有序列長度必須相同 由Series組成的字典:每個Series會成為一列。如果沒有指定索引,各Series的索引會被合并 另一個DataFrame:該DataFrame的索引將會被沿用
df.values
array([['x', 1000, 10],
['y', 2000, 20],
['z', 3000, 30]], dtype=object)
df.index
Index(['a', 'b', 'c'], dtype='object')
df.columns
Index(['A', 'B', 'C'], dtype='object')
df=pd.DataFrame(data,columns=['C','B','A'],index=['a','b','c'])
df

df['D']=10
df

del df['D']
df

new_df=pd.DataFrame({'A':'new','B':4000,'C':40},index=['d'])
df=df.append(new_df)
df

df.loc['e']=['new2',5000,50]
df

df2=pd.DataFrame([1,2,3,4,5],index=['a','b','c','d','z'],columns=['E'])
df2

df.join(df2)

df.join(df2,how='outer')

dates=pd.date_range('20160101',periods=8)
dates
DatetimeIndex(['2016-01-01', '2016-01-02', '2016-01-03', '2016-01-04',
'2016-01-05', '2016-01-06', '2016-01-07', '2016-01-08'],dtype='da
tetime64[ns]', freq='D')
start:字符串/日期時間 | 開始日期;默認(rèn)為None end:字符串/日期時間 | 結(jié)束日期;默認(rèn)為None periods:整數(shù)/None | 如果start或者end空缺,就必須指定;從start開始,生成periods日期數(shù)據(jù);默認(rèn)為None freq:dtype | 周期;默認(rèn)是D,即周期為一天。也可以寫成類似5H的形式,即5小時。其他的頻率參數(shù)見下文 tz:字符串/None | 本地化索引的時區(qū)名稱 normalize:布爾值 | 將start和end規(guī)范化為午夜;默認(rèn)為False name:字符串 | 生成的索引名稱
B:交易日 C:自定義交易日(試驗中) D:日歷日 W:每周 M:每月底 SM:半個月頻率(15號和月底) BM:每個月份最后一個交易日 CBM:自定義每個交易月 MS:日歷月初 SMS:月初開始的半月頻率(1號,15號) BMS:交易月初 CBMS:自定義交易月初 Q:季度末 BQ:交易季度末 QS:季度初 BQS:交易季度初 A:年末 BA:交易年度末 AS:年初 BAS:交易年度初 BH:交易小時 H:小時 T,min:分鐘 S:秒 L,ms:毫秒 U,us:微秒 N:納秒
df=pd.DataFrame(np.random.randn(8,4),index=dates,columns=list('ABCD'))
df

df.sum()A 0.241727
B -0.785350
C -0.547433
D -1.449231
dtype: float64
df.mean()A 0.030216
B -0.098169
C -0.068429
D -0.181154
dtype: float64
df.cumsum()
df.describe()
df.sort_values('A')
df.sort_index(ascending=False)
df['A']
2016-01-01 -1.142350
2016-01-02 -0.816178
2016-01-03 0.030206
2016-01-04 1.930175
2016-01-05 0.571512
2016-01-06 0.220445
2016-01-07 0.292176
2016-01-08 -0.844260
Freq: D, Name: A, dtype: float64
df[0:5]

df.loc[dates[0]]
A -1.142350
B -1.999351
C 0.772343
D -0.851840
Name: 2016-01-01 00:00:00, dtype: float64
df.loc[:,['A','C']]

df.loc['20160102':'20160106',['A','C']]

df.loc['20160102',['A','C']]
A -0.816178
C -0.595195
Name: 2016-01-02 00:00:00, dtype: float64
df.loc['20160102':'20160102',['A','C']]

df.iloc[2]
A 0.030206
B 0.759953
C -1.446549
D -0.874364
Name: 2016-01-03 00:00:00, dtype: float64
df.iloc[3:6,1:3]

df.A>0
2016-01-01 False
2016-01-02 False
2016-01-03 True
2016-01-04 True
2016-01-05 True
2016-01-06 True
2016-01-07 True
2016-01-08 False
Freq: D, Name: A, dtype: bool
df[df.A>0]

df>0

df[df>0]

df['E']=0
df

df.loc[:,'E']=1
df

df.loc['2016-01-01','E'] = 2
df

df.loc[:,'D'] = np.array([2] * len(df))
df
df.ix[1,'E'] = 3
df

假如索引本身就是整數(shù)類型,那么ix只會使用標(biāo)簽索引,而不會使用位置索引,即使沒能在索引中找到相應(yīng)的值(這個時候會報錯)。 如果索引既有整數(shù)類型,也有其他類型(比如字符串),那么ix對于整數(shù)會直接使用位置索引,但對于其他類型(比如字符串)則會使用標(biāo)簽索引。
import pandas as pd
s=pd.Series([1,4,6,2,3])
s
0 1
1 4
2 6
3 2
4 3
s.values
array([1, 4, 6, 2, 3], dtype=int64)s.index
Int64Index([0, 1, 2, 3, 4], dtype='int64')
s=pd.Series([1,2,3,4],index=['a','b','c','d'])
s
a 1
b 2
c 3
d 4
s['a']
1s[['b','c']]
b 2
c 3
s[s>1]
b 2
c 3
d 4s*3
a 3
b 6
c 9
d 12
s1=pd.Series([1,2,3],index=['a','b','c'])
s2=pd.Series([4,5,6],index=['b','c','d'])
s1+s2
a NaN
b 6
c 8
d NaN
s.index
Index([u'a', u'b', u'c', u'd'], dtype='object')s.index=['w','x','y','z']
s.index
Index([u'w', u'x', u'y', u'z'], dtype='object')
s
w 1
x 2
y 3
z 4
相關(guān)閱讀:
評論
圖片
表情
