Day24(pandas创建序列和数组 查看数据 数据排序 数据修改  数据合并   数据分组 多维索引列表的创建 数据透视 时间序列 数据写入磁盘文件)

这篇博客详细介绍了Pandas的使用,包括创建序列和数组、查看数据、数据排序、数据修改、数据合并(重点讨论了merge函数)、数据分组、多维索引列表的创建、数据透视、时间序列操作(如计算时间间隔和未来日期)以及如何将数据写入磁盘文件。实例丰富,深入浅出地展示了Pandas在数据分析中的强大功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

创建序列和数组

查看数据

数据排序

数据修改 

数据合并

2.用merge函数 

数据分组

多维索引列表的创建

将列索引转化为行索引

数据透视

时间序列 

pandas里面时间运算非常简便

计算时间间隔

计算几天后日期

category数据

数据写入磁盘文件


创建序列和数组

import pandas as pd
import numpy as np
s = pd.Series([1, 3, 5, np.NAN, 8, 4]) #创建序列
s
Out[6]: 
0    1.0
1    3.0
2    5.0
3    NaN
4    8.0
5    4.0
dtype: float64


dates = pd.date_range('20160301',periods=6) # 创建日期序列,periods为日期个数
dates
Out[8]: 
DatetimeIndex(['2016-03-01', '2016-03-02', '2016-03-03', '2016-03-04',
               '2016-03-05', '2016-03-06'],
              dtype='datetime64[ns]', freq='D')



 #创建一个6行4列,以dates为行标,以ABCD为列标的二维数组,注意np.random.randn为创建二维数组
data = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
data
Out[5]: 
                   A         B         C         D
2016-03-01 -0.776398 -0.113742 -0.482815 -2.377686
2016-03-02 -0.232630  0.929686 -0.029953  0.830375
2016-03-03 -0.858234  1.130634  1.450110 -1.312117
2016-03-04 -0.878027 -0.219138 -0.459148  0.428571
2016-03-05  0.021880 -1.655298 -1.618421  0.541966
2016-03-06 -0.903818  0.702461  1.966906 -0.348830


#以字典的方式创建二维数组
d={'A':1,'B':pd.Timestamp('20130301'),'C':range(4),'D':np.arange(4)}
d
Out[7]: 
{'A': 1,
 'B': Timestamp('2013-03-01 00:00:00'),
 'C': range(0, 4),
 'D': array([0, 1, 2, 3])}
#利用d生成二维数组
df = pd.DataFrame(d)
df
Out[9]: 
   A          B  C  D
0  1 2013-03-01  0  0
1  1 2013-03-01  1  1
2  1 2013-03-01  2  2
3  1 2013-03-01  3  3

 

查看数据

#查看列
df.A
Out[10]: 
0    1
1    1
2    1
3    1
Name: A, dtype: int64

#高效率的数据索引loc,只认标签名如:20160305
df.loc[A]
data.loc['20160302':'20160305',['B','C']]

#data.iloc可以选择索引代号
data,iloc[:,1:3]#选择所有行的1-3列

#查看A的数据类型,A为一个序列
type(df.A)
Out[11]: pandas.core.series.Series

data.head(2)#查看前几行,默认前5行
Out[14]: 
                   A         B         C         D
2016-03-01 -0.776398 -0.113742 -0.482815 -2.377686
2016-03-02 -0.232630  0.929686 -0.029953  0.830375
data.tail()#查看后几行,默认5行

Out[15]: 
                   A         B         C         D
2016-03-02 -0.232630  0.929686 -0.029953  0.830375
2016-03-03 -0.858234  1.130634  1.450110 -1.312117
2016-03-04 -0.878027 -0.219138 -0.459148  0.428571
2016-03-05  0.021880 -1.655298 -1.618421  0.541966
2016-03-06 -0.903818  0.702461  1.966906 -0.348830

data.index#查看行标
data.columns#查看列标
data.values#查看值

data.describe()#查看数据的统计数据
Out[16]: 
              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean  -0.604538  0.129100  0.137780 -0.372954 #均值
std    0.397235  1.033157  1.335795  1.251326 #方差
min   -0.903818 -1.655298 -1.618421 -2.377686
25%   -0.873078 -0.192789 -0.476898 -1.071295
50%   -0.817316  0.294360 -0.244551  0.039870
75%   -0.368572  0.872880  1.080094  0.513617
max    0.021880  1.130634  1.966906  0.830375

数据排序

data.sort_index(axis=1,ascending=False)#根据列标签降序,1为列,2为行

Out[18]: 
                   D         C         B         A
2016-03-01 -2.377686 -0.482815 -0.113742 -0.776398
2016-03-02  0.830375 -0.029953  0.929686 -0.232630
2016-03-03 -1.312117  1.450110  1.130634 -0.858234
2016-03-04  0.428571 -0.459148 -0.219138 -0.878027
2016-03-05  0.541966 -1.618421 -1.655298  0.021880
2016-03-06 -0.348830  1.966906  0.702461 -0.903818

data.sort_values(by='A')#根据A列的数据排序
Out[19]: 
                   A         B         C         D
2016-03-06 -0.903818  0.702461  1.966906 -0.348830
2016-03-04 -0.878027 -0.219138 -0.459148  0.428571
2016-03-03 -0.858234  1.130634  1.450110 -1.312117
2016-03-01 -0.776398 -0.113742 -0.482815 -2.377686
2016-03-02 -0.232630  0.929686 -0.029953  0.830375
2016-03-05  0.021880 -1.655298 -1.618421  0.541966

#可以使用布尔运算
data[data.A>0]
Out[20]: 
                  A         B         C         D
2016-03-05  0.02188 -1.655298 -1.618421  0.541966

数据修改 

#修改元素
data.iat[0,0] = 100
        A         B         C         D
2016-03-01  100.000000 -0.113742 -0.482815 -2.377686
2016-03-02   -0.232630  0.929686 -0.029953  0.830375
2016-03-03   -0.858234  1.130634  1.450110 -1.312117
2016-03-04   -0.878027 -0.219138 -0.459148  0.428571
2016-03-05    0.021880 -1.655298 -1.618421  0.541966
2016-03-06   -0.903818  0.702461  1.966906 -0.348830

data.A = range(6)
 A         B         C         D
2016-03-01  0 -0.113742 -0.482815 -2.377686
2016-03-02  1  0.929686 -0.029953  0.830375
2016-03-03  2  1.130634  1.450110 -1.312117
2016-03-04  3 -0.219138 -0.459148  0.428571
2016-03-05  4 -1.655298 -1.618421  0.541966
2016-03-06  5  0.702461  1.966906 -0.348830

data.iloc[:,2:5] = 1000
#用于查看的方法基本都可以用于修改


#添加新的行与列
dates = pd.date_range('20160301', periods=6)
data = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
data: 
                   A         B         C         D
2016-03-01 -0.433188  0.055299  0.719234 -0.669594
2016-03-02 -0.408811  1.321846 -0.498564 -0.039656
2016-03-03 -1.064202  0.810191 -0.160165  0.921816
2016-03-04 -0.339701  0.104324 -0.989710  0.843287
2016-03-05 -2.667729  1.336503  0.211461 -0.396538
2016-03-06 -0.437394 -1.000561  0.113986 -0.335567

#添加
df1=data.reindex(index=dates[0:4],columns=list(data.columns)+['E'])
#默认添加后的值为NaN
df1: 
                   A         B         C         D   E
2016-03-01 -0.433188  0.055299  0.719234 -0.669594 NaN
2016-03-02 -0.408811  1.321846 -0.498564 -0.039656 NaN
2016-03-03 -1.064202  0.810191 -0.160165  0.921816 NaN
2016-03-04 -0.339701  0.104324 -0.989710  0.843287 NaN


#对NaN的处理可以用上面修改数据的方法,还可以用
df1.dropna() # 去掉na的行
df1.fillna(value=5)/df1.fillna(5)#填充
                  A         B         C         D    E
2016-03-01 -0.433188  0.055299  0.719234 -0.669594  5.0
2016-03-02 -0.408811  1.321846 -0.498564 -0.039656  5.0
2016-03-03 -1.064202  0.810191 -0.160165  0.921816  5.0
2016-03-04 -0.339701  0.104324 -0.989710  0.843287  5.0

pd.isnull(df1).any().any()#返回是否存在空数据


 

数据合并

#数据合并
dates = pd.date_range('20160301', periods=6)
data = pd.DataFrame(np.random.randn(10, 4),columns=list('ABCD'))

   A         B         C         D
0 -1.434443 -0.352534 -0.846994  1.586152
1 -0.918723 -1.843476  0.456694  1.256904
2 -1.658280  0.508838  1.474068  0.180334
3 -1.304920 -0.751033  0.919447  1.212845
4  0.224827  0.208548  0.797374 -0.730663
5  0.050870  0.396789 -1.743149  0.223697
6 -1.820222 -0.839744  0.980039 -0.203871
7 -0.555854  1.026396 -0.601722  1.234643
8 -0.160671  0.117587  0.975355 -0.647912
9  2.133687 -1.632052 -0.223723 -1.669436

#用iloc来取行,结果与data一样
df1=pd.concat([data.iloc[:3],data.iloc[3:7],data.iloc[7:]])

(data==df1).all().all() #所有元素是不是都是一样的


2.用merge函数 

 

 

数据分组

创建一个数组 

先求 和,A里面只有BAR和FOO

多维索引列表的创建

将列索引转化为行索引

数据透视

只看一部分数据

查看元数据中A,B两列为行索引指标,以C为列索引数据,NAN为原数据中不存在的

时间序列 

pandas里面时间运算非常简便

 

以秒为单位创建数据 

数据采样,每两分钟求和

计算时间间隔

计算几天后日期

category数据

数据写入磁盘文件

指定第0列为索引列

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值