python-pandas-numpy DAY_17

学习内容
pandas的基本操作
重点
1.数据的整形(互换行列索引)stack操作

import numpy as np
import pandas as pd

df = pd.DataFrame(np.arange(24).reshape(6, 4), index=pd.date_range("20200124", periods=6),
                  columns=['A', 'B', 'C', 'D'])
print(df)



             A   B   C   D
2020-01-24   0   1   2   3
2020-01-25   4   5   6   7
2020-01-26   8   9  10  11
2020-01-27  12  13  14  15
2020-01-28  16  17  18  19
2020-01-29  20  21  22  23
print(df.stack())#整形操作
2020-01-24  A     0
            B     1
            C     2
            D     3
2020-01-25  A     4
            B     5
            C     6
            D     7
2020-01-26  A     8
            B     9
            C    10
            D    11
2020-01-27  A    12
            B    13
            C    14
            D    15
2020-01-28  A    16
            B    17
            C    18
            D    19
2020-01-29  A    20
            B    21
            C    22
            D    23

df1 = df.stack()#把df的数据整形放入df1
print(df1.unstack())#stack支持反向操作,unstack就返回原样
             A   B   C   D
2020-01-24   0   1   2   3
2020-01-25   4   5   6   7
2020-01-26   8   9  10  11
2020-01-27  12  13  14  15
2020-01-28  16  17  18  19
2020-01-29  20  21  22  23

2.数据透视操作,pivot_table操作

df1 = df.pivot_table(value=["D"]index=["A","B"],columns=["C"])
#行索引用AB的值,列索引用C的值,输出D的值在这张表的数据,这样能清楚看到所在位置
print(df1)
         D                             
C       2    6     10    14    18    22
A  B                                   
0  1   3.0  NaN   NaN   NaN   NaN   NaN
4  5   NaN  7.0   NaN   NaN   NaN   NaN
8  9   NaN  NaN  11.0   NaN   NaN   NaN
12 13  NaN  NaN   NaN  15.0   NaN   NaN
16 17  NaN  NaN   NaN   NaN  19.0   NaN
20 21  NaN  NaN   NaN   NaN   NaN  23.0

3.时间序列操作

rng=pd.date_range("20200124",periods=1000,freq="s")
#创建一个周期为1000的数据,以秒为基本单位
a=pd.Series(np.random.randint(0,500,len(rng)),index=rng)
#创建一个序列,一共1000个值,值为0到500之间的数字,行索引使用rng的数据
b = a.resample("2Min", how="sum")
#更改采样时间,每2分钟采一次
print(b)
2020-01-24 00:00:00    27477
2020-01-24 00:02:00    30828
2020-01-24 00:04:00    30579
2020-01-24 00:06:00    30374
2020-01-24 00:08:00    29838
2020-01-24 00:10:00    32184
2020-01-24 00:12:00    30596
2020-01-24 00:14:00    30237
2020-01-24 00:16:00     9652


#rng以秒为单位,也可以为季度,单位用Q
rng1=pd.period_range("20100124","20200124",freq="Q")
#周期序列,输入起始和终止位置,然后写入基本单位
print(rng1)
PeriodIndex(['2010Q1', '2010Q2', '2010Q3', '2010Q4', '2011Q1', '2011Q2',
             '2011Q3', '2011Q4', '2012Q1', '2012Q2', '2012Q3', '2012Q4',
             '2013Q1', '2013Q2', '2013Q3', '2013Q4', '2014Q1', '2014Q2',
             '2014Q3', '2014Q4', '2015Q1', '2015Q2', '2015Q3', '2015Q4',
             '2016Q1', '2016Q2', '2016Q3', '2016Q4', '2017Q1', '2017Q2',
             '2017Q3', '2017Q4', '2018Q1', '2018Q2', '2018Q3', '2018Q4',
             '2019Q1', '2019Q2', '2019Q3', '2019Q4', '2020Q1'],
            dtype='period[Q-DEC]', freq='Q-DEC')

4.时间运算

print(pd.Timestamp("20200123")-pd.Timestamp("20200115"))
#计算相差的时间
8 days 00:00:00
print(pd.Timestamp("20200123")+pd.Timedelta(days=5,minutes=20,seconds=40))
#在2020 01 23 0点0分的基础上,加上5天,20分钟,40秒
2020-01-28 00:20:40

5.类别数据以及数据的读和写
基本的数据我们可以进行读写操作

import numpy as np
import pandas as pd

dates = pd.date_range("20200124", periods=6)
df = pd.DataFrame(np.arange(30).reshape(6, 5), index=dates, columns=['A', 'B', 'C', 'D', "E"])#创建6行5列的数据
k1=df.to_csv("data.cav")#写入数据
print(k1)

这时候刷新目录出现data.cav文件,数据就是之前创造的数据,但是我们打印k1的值,输出None

k2=pd.read_csv("data.cav")
print(k2)#注意这时候读取操作使用pandas功能
   Unnamed: 0   A   B   C   D   E
0  2020-01-24   0   1   2   3   4
1  2020-01-25   5   6   7   8   9
2  2020-01-26  10  11  12  13  14
3  2020-01-27  15  16  17  18  19
4  2020-01-28  20  21  22  23  24
5  2020-01-29  25  26  27  28  29


k2=pd.read_csv("data.cav",index_col=0)#防止将序列号当作内容
             A   B   C   D   E
2020-01-24   0   1   2   3   4
2020-01-25   5   6   7   8   9
2020-01-26  10  11  12  13  14
2020-01-27  15  16  17  18  19
2020-01-28  20  21  22  23  24
2020-01-29  25  26  27  28  29
这样结果就与先前创作的结果一致

6.类别数据

dates = pd.date_range("20200124", periods=6)
df = pd.DataFrame(np.arange(30).reshape(6, 5), index=dates, columns=['A', 'B', 'C', 'D', "E"])#依旧是之前的数据
df["F"]=df.B.astype("category")
print(df)#我们给df加上一列F,内容使用B的内容,类型是category
             A   B   C   D   E   F
2020-01-24   0   1   2   3   4   1
2020-01-25   5   6   7   8   9   6
2020-01-26  10  11  12  13  14  11
2020-01-27  15  16  17  18  19  16
2020-01-28  20  21  22  23  24  21
2020-01-29  25  26  27  28  29  26


df.F.cat.categories = ["one", "six", "eleven", "sixteen", "twenty-one", "twenty-six"]#我们对F的内容(类别数据)进行内容更改
print(df)
             A   B   C   D   E           F
2020-01-24   0   1   2   3   4         one
2020-01-25   5   6   7   8   9         six
2020-01-26  10  11  12  13  14      eleven
2020-01-27  15  16  17  18  19     sixteen
2020-01-28  20  21  22  23  24  twenty-one
2020-01-29  25  26  27  28  29  twenty-six
发现类别数据直接通过指令就可以修改,如果更改一般数据,需要确定具体位置
发布了33 篇原创文章 · 获赞 0 · 访问量 687

猜你喜欢

转载自blog.csdn.net/soulproficiency/article/details/104083406
今日推荐