Pandas模块的操作

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

猜你喜欢

转载自blog.csdn.net/stevedish_xiaojia/article/details/83050985
今日推荐