1 dateframe的创建
pandas其实就是一个带有行名字和列名字的矩阵,有点类似于表数据。有表行号,和列标号。
Dataframe的创建一般有两种方式:一种是通过给定一个numpy数组来创建,另一种是通过传入一个字典来创建
>>> s = pd.Series([1,3,6,np.nan,44,1]) ##创建一个一维的pandas
>>> s
0 1.0
1 3.0
2 6.0
3 NaN
4 44.0
5 1.0
dtype: float64
>>> dates = pd.date_range('20180101', periods=6) ##先定义行索引
>>> dates
DatetimeIndex(['2018-01-01', '2018-01-02', '2018-01-03', '2018-01-04',
'2018-01-05', '2018-01-06'],
dtype='datetime64[ns]', freq='D')
>>> df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=['a','b','c','d']) ##创建一个dataframe,index表示行标号名字,columns表示列标号的名字
>>> df
a b c d
2018-01-01 0.536994 -0.115594 0.132522 0.392627
2018-01-02 -0.412613 -0.685374 0.005473 0.239768
2018-01-03 -2.427620 1.404624 -0.398478 -0.593111
2018-01-04 0.402160 -0.260783 1.252943 -0.093108
2018-01-05 2.181188 -1.190891 -0.362150 0.587285
2018-01-06 -0.204771 0.053036 0.393078 0.130053
>>> df1 = pd.DataFrame(np.arange(12).reshape(3,4)) ##没有给表明序号是从0,1,2,排列的
>>> df1
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
###还能通过字典的方式来创建一个dataframe
>>> df2 = pd.DataFrame({'A':1.,'B':pd.Timestamp('20130102'),'C':pd.Series(1,index=list(range(4)),dtype='float32'),'D':np.array([3]*4,dtype='int32'),'E':pd.Categorical(["test","train","test","train"]),'F':'foo'})
>>> df2
A B C D E F
0 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
3 1.0 2013-01-02 1.0 3 train foo
2 dateframe的属性
>>> df2.dtypes ##输出每个数据的类型
A float64
B datetime64[ns]
C float32
D int32
E category
F object
dtype: object
>>> df2.index ##打印行名字
Int64Index([0, 1, 2, 3], dtype='int64')
>>> df2.columns ##获取列名字
Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
>>> df2.values ##获取值
array([[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'test', 'foo'],
[1.0, Timestamp('2013-01-02 00:00:00'), 1.0, 3, 'train', 'foo']], dtype=object)
3 基本方法
>>> df2.describe() ###描述dataframe的基本统计信息(只能描述int和float型的东西)
A C D
count 4.0 4.0 4.0
mean 1.0 1.0 3.0
std 0.0 0.0 0.0
min 1.0 1.0 3.0
25% 1.0 1.0 3.0
50% 1.0 1.0 3.0
75% 1.0 1.0 3.0
max 1.0 1.0 3.0
>>> df2.T ####转置
0 1 2 \
A 1 1 1
B 2013-01-02 00:00:00 2013-01-02 00:00:00 2013-01-02 00:00:00
C 1 1 1
D 3 3 3
E test train test
F foo foo foo
3
A 1
B 2013-01-02 00:00:00
C 1
D 3
E train
F foo
>>> df2.sort_index(axis=1,ascending=False) ####根据列数据排序
F E D C B A
0 foo test 3 1.0 2013-01-02 1.0
1 foo train 3 1.0 2013-01-02 1.0
2 foo test 3 1.0 2013-01-02 1.0
3 foo train 3 1.0 2013-01-02 1.0
>>> df2.sort_index(axis=0,ascending=False) ####根据行数据排序
A B C D E F
3 1.0 2013-01-02 1.0 3 train foo
2 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
0 1.0 2013-01-02 1.0 3 test foo
>>> df2.sort_values(by='E') ####根据矩阵数据进行排序
A B C D E F
0 1.0 2013-01-02 1.0 3 test foo
2 1.0 2013-01-02 1.0 3 test foo
1 1.0 2013-01-02 1.0 3 train foo
3 1.0 2013-01-02 1.0 3 train foo
Dateframe的读取数据:
>>> df ###参考dataframe
A B C D
2018-01-01 0 1 2 3
2018-01-02 4 5 6 7
2018-01-03 8 9 10 11
2018-01-04 12 13 14 15
2018-01-05 16 17 18 19
2018-01-06 20 21 22 23
>>> df['A'] ##获取第A列
2018-01-01 0
2018-01-02 4
2018-01-03 8
2018-01-04 12
2018-01-05 16
2018-01-06 20
Freq: D, Name: A, dtype: int32
>>> df.A ##获取第A列
2018-01-01 0
2018-01-02 4
2018-01-03 8
2018-01-04 12
2018-01-05 16
2018-01-06 20
Freq: D, Name: A, dtype: int32
>>> df[0:3] ##根据行数来选择
A B C D
2018-01-01 0 1 2 3
2018-01-02 4 5 6 7
2018-01-03 8 9 10 11
>>> df['20180103':'20180105'] ##根据行的值空间来选择
A B C D
2018-01-03 8 9 10 11
2018-01-04 12 13 14 15
2018-01-05 16 17 18 19
>>> df.loc['20180102']
A 4
B 5
C 6
D 7
Name: 2018-01-02 00:00:00, dtype: int32
>>> df.loc[:,['A','B']]
A B
2018-01-01 0 1
2018-01-02 4 5
2018-01-03 8 9
2018-01-04 12 13
2018-01-05 16 17
2018-01-06 20 21
>>> df.loc['20180104',['A','B']]
A 12
B 13
Name: 2018-01-04 00:00:00, dtype: int32
>>> df.iloc[3,2]
14
>>> df.iloc[3]
A 12
B 13
C 14
D 15
Name: 2018-01-04 00:00:00, dtype: int32
>>> df.iloc[3:5,1:3]
B C
2018-01-04 13 14
2018-01-05 17 18
>>> df.iloc[[1,3,5],1:3]
B C
2018-01-02 5 6
2018-01-04 13 14
2018-01-06 21 22
>>> df.ix[:3,['A','C']]
A C
2018-01-01 0 2
2018-01-02 4 6
2018-01-03 8 10
>>> df[df.A>8]
A B C D
2018-01-04 12 13 14 15
2018-01-05 16 17 18 19
2018-01-06 20 21 22 23
对dataframe进行修改
>>> df.iloc[2,2]=111
>>> df.A[df.A>4]=0
>>> df
A B C D
2018-01-01 0 1 2 3
2018-01-02 4 5 6 7
2018-01-03 0 9 111 11
2018-01-04 0 13 14 15
2018-01-05 0 17 18 19
2018-01-06 0 21 22 23
>>> df['E']=pd.Series([1,2,3,4,5,6],index=pd.date_range('20180101',periods=6)) ###增加一行
>>> df
A B C D E
2018-01-01 0 1 2 3 1
2018-01-02 4 5 6 7 2
2018-01-03 0 9 111 11 3
2018-01-04 0 13 14 15 4
2018-01-05 0 17 18 19 5
2018-01-06 0 21 22 23 6