十分钟搞定pandas内容

本文详细介绍如何使用Python的Pandas库进行数据处理,包括创建数据结构、数据查看、数据选择和数据导入导出等核心操作,适合初学者快速入门。

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

参考:http://pandas.pydata.org/pandas-docs/stable/whatsnew.html

https://www.cnblogs.com/chaosimple/p/4153083.html

十分钟搞定pandas

#需要导入以下所需要的包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

一、创建对象

1、可以通过传递一个list对象来创建一个Series, pandas会默认创建整型索引:

#创建一个序列
s = pd.Series([1,3,5,np.nan,6,8])
s
0    1.0
1    3.0
2    5.0
3    NaN
4    6.0
5    8.0
dtype: float64

2、通过传递一个numpy array,时间索引以及列标签来创建一个数据帧DataFrame:

#创建一个时间范围,周期为6
dates = pd.date_range('20130101',periods=6)
dates
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')
#创建一个6行5列的数据帧,行名称为日期,列属性名称为ABCDE,内容由randn函数创建,
#若不存在 index=dates , 则行名用1,2,3等数字表示;若不存在 columns=list('ABCDE'),则列属性名称也用1,2,3等数字表示
df = pd.DataFrame(np.random.randn(6,5),index=dates,columns=list('ABCDE'))
df
ABCDE
2013-01-01-0.964738-0.6136430.111717-0.355337-0.395985
2013-01-020.898280-1.447527-1.3908470.344747-0.476424
2013-01-030.1995461.277674-0.6342700.014981-0.028560
2013-01-04-0.362915-1.069098-0.567669-0.2344150.585418
2013-01-050.761135-2.1167710.7451770.851333-0.624389
2013-01-060.052822-0.689503-0.4014621.050330-1.098080

3、使用传递的可转换序列的字典对象创建数据帧DataFrame:

#创建数据帧,每个字典的关键字表示列属性,键值对应列属性的value
df2 = pd.DataFrame({ 'A' : 1.,
                     'B' : pd.Timestamp('20130102'),
                     'C' : pd.Series(1,index=list(range(5)),dtype='float32'),
                     'D' : np.array([3] * 5,dtype='int32'),
                     'E' : pd.Categorical(["test","train","test","train","sss"]),
                     'F' : 'foo' })
df2
ABCDEF
01.02013-01-021.03testfoo
11.02013-01-021.03trainfoo
21.02013-01-021.03testfoo
31.02013-01-021.03trainfoo
41.02013-01-021.03sssfoo
#查看数据帧中各类数据类型,只能用于查看字典形成的数据帧,用randn形成的数据帧不能使用该命令,否则出错
df2.dtypes
A           float64
B    datetime64[ns]
C           float32
D             int32
E          category
F            object
dtype: object
#df2. <TAB>

如你所见, 列 A, B, C, 和 D 也是自动完成标签. E 也是可用的; 为了简便起见,后面的属性显示被截断.

二、查看数据

1、查看帧顶部和底部行

#df.head(5)表示查看数据帧df的头五行,默认为5,也可看头3行
df.head()
ABCDE
2013-01-01-0.964738-0.6136430.111717-0.355337-0.395985
2013-01-020.898280-1.447527-1.3908470.344747-0.476424
2013-01-030.1995461.277674-0.6342700.014981-0.028560
2013-01-04-0.362915-1.069098-0.567669-0.2344150.585418
2013-01-050.761135-2.1167710.7451770.851333-0.624389
#df.tail(3)表示查看数据帧df的尾3行,默认为5
df.tail(3)
ABCDE
2013-01-04-0.362915-1.069098-0.567669-0.2344150.585418
2013-01-050.761135-2.1167710.7451770.851333-0.624389
2013-01-060.052822-0.689503-0.4014621.050330-1.098080

2、显示数据帧的索引,列和底层numpy数据

#取出数据帧df的索引项,即行名称
df.index
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
               '2013-01-05', '2013-01-06'],
              dtype='datetime64[ns]', freq='D')
#取出数据帧df的属性列名称
df.columns
Index(['A', 'B', 'C', 'D', 'E'], dtype='object')
#取出数据帧df中的内容,这一点很重要,能够将数据帧的行索引项名称和列属性项名称去掉
df.values
array([[-0.96473798, -0.61364267,  0.11171683, -0.35533705, -0.39598527],
       [ 0.8982796 , -1.44752742, -1.39084675,  0.3447475 , -0.47642425],
       [ 0.19954556,  1.27767394, -0.63427023,  0.01498146, -0.0285603 ],
       [-0.36291476, -1.06909798, -0.56766898, -0.23441501,  0.58541824],
       [ 0.7611348 , -2.11677119,  0.74517694,  0.85133303, -0.62438946],
       [ 0.05282224, -0.68950339, -0.4014616 ,  1.05032997, -1.09808038]])

3、描述显示数据快速统计摘要

#描述数据帧df中的内容的一些统计项,包括数目、均值、标准差、最小最大值及其中间值
df.describe()
type(df)
pandas.core.frame.DataFrame

4、转置数据

#将行列进行转化,包括索引项、列属性项以及其中的内容
df.T
2013-01-01 00:00:002013-01-02 00:00:002013-01-03 00:00:002013-01-04 00:00:002013-01-05 00:00:002013-01-06 00:00:00
A-0.9647380.8982800.199546-0.3629150.7611350.052822
B-0.613643-1.4475271.277674-1.069098-2.116771-0.689503
C0.111717-1.390847-0.634270-0.5676690.745177-0.401462
D-0.3553370.3447470.014981-0.2344150.8513331.050330
E-0.395985-0.476424-0.0285600.585418-0.624389-1.098080

5、按轴排序

#若axis=1,则行索引项不变,列属性项进行竖轴转换,内容不改变;若axis=0,则列属性项不变,行索引项进行横轴转换,内容不改变;默认为axis=0,即横轴转换
# ascending=Flase 必须存在,否则数据帧不作任何改变
df.sort_index(axis=1, ascending=False)
EDCBA
2013-01-01-0.395985-0.3553370.111717-0.613643-0.964738
2013-01-02-0.4764240.344747-1.390847-1.4475270.898280
2013-01-03-0.0285600.014981-0.6342701.2776740.199546
2013-01-040.585418-0.234415-0.567669-1.069098-0.362915
2013-01-05-0.6243890.8513330.745177-2.1167710.761135
2013-01-06-1.0980801.050330-0.401462-0.6895030.052822

6、按值排序

#df.sort_values(columns='B')
df.sort_values(by='B')   #一开始是columns指定列排序,现在改为了by进行排序
ABCDE
2013-01-050.761135-2.1167710.7451770.851333-0.624389
2013-01-020.898280-1.447527-1.3908470.344747-0.476424
2013-01-04-0.362915-1.069098-0.567669-0.2344150.585418
2013-01-060.052822-0.689503-0.4014621.050330-1.098080
2013-01-01-0.964738-0.6136430.111717-0.355337-0.395985
2013-01-030.1995461.277674-0.6342700.014981-0.028560

三、选择器

注释: 标准Python / Numpy表达式可以完成这些互动工作, 但在生产代码中, 我们推荐使用优化的pandas数据访问方法, .at, .iat, .loc, .iloc 和 .ix.

1、读取

(1)选择单列,这会产生一个序列,等价与df.A

df['A']
2013-01-01   -0.964738
2013-01-02    0.898280
2013-01-03    0.199546
2013-01-04   -0.362915
2013-01-05    0.761135
2013-01-06    0.052822
Freq: D, Name: A, dtype: float64

(2)使用 [] 选择行切片,若想进行列切片,可以先将数据帧进行转置,然后切片,最后转换回来

#只能进行行切片,不能做列切片;
df[0:3]
ABCDE
2013-01-01-0.964738-0.6136430.111717-0.355337-0.395985
2013-01-020.898280-1.447527-1.3908470.344747-0.476424
2013-01-030.1995461.277674-0.6342700.014981-0.028560
df['20130102':'20130104']
ABCDE
2013-01-020.898280-1.447527-1.3908470.344747-0.476424
2013-01-030.1995461.277674-0.6342700.014981-0.028560
2013-01-04-0.362915-1.069098-0.567669-0.2344150.585418

2、使用标签选择

更多标签选择

(1)使用标签获取横截面

#获取数据帧的某一行,此处若写成 df.loc[dates[0]], 则出现错误
df.loc[dates[0]]
A   -0.964738
B   -0.613643
C    0.111717
D   -0.355337
E   -0.395985
Name: 2013-01-01 00:00:00, dtype: float64

(2)使用标签选择多轴

#取出两个列属性的所有行
df.loc[:,['A','B']]
AB
2013-01-01-0.964738-0.613643
2013-01-020.898280-1.447527
2013-01-030.1995461.277674
2013-01-04-0.362915-1.069098
2013-01-050.761135-2.116771
2013-01-060.052822-0.689503

(3)显示标签切片,包含两个端点

#取出数据帧中的3行2列
df.loc['20130102':'20130104',['A','B']]
AB
2013-01-020.898280-1.447527
2013-01-030.1995461.277674
2013-01-04-0.362915-1.069098

(4)降低返回对象维度

#通过选取某一行,提取出该行的列属性值,从而达到降低维度的作用
df.loc['20130102',['A','B']]
A    0.898280
B   -1.447527
Name: 2013-01-02 00:00:00, dtype: float64
#取出数据帧的行列名称---标签,取其中的内容
df.loc['20130102',['A','B']].values
array([ 0.8982796 , -1.44752742])

(5)获取标量值

#获取某一行某一列的值,行列用对应标签取出
df.loc[dates[0],'A']
-0.9647379819614053

(6)快速访问并获取标量数据(同上面的方法一样)

df.at[dates[0],'A']
-0.9647379819614053

3、按位置选择 —— 对应按标签选择

(1)传递整数选择位置

#这里只需要指明第3行,即可取出;对应前面的df.loc[date[0]],需要指明行的属性的第0行
df.iloc[3]
A   -0.362915
B   -1.069098
C   -0.567669
D   -0.234415
E    0.585418
Name: 2013-01-04 00:00:00, dtype: float64

(2)使用整数片段,效果类似 numpy / python

df.iloc[3:5,0:2]
AB
2013-01-04-0.362915-1.069098
2013-01-050.761135-2.116771

(3)使用整数偏移定位列表,效果类似于 numpy / python 样式

超级重要,正好解决燃眉之急

#直接就可以取出自己想要取出的某一行某一列,相当有用
df.iloc[[1,2,4],[0,2]]
AC
2013-01-020.898280-1.390847
2013-01-030.199546-0.634270
2013-01-050.7611350.745177

(4)显示行切片——爆裂所有列

df.iloc[1:3,:]
ABCDE
2013-01-020.898280-1.447527-1.3908470.344747-0.476424
2013-01-030.1995461.277674-0.6342700.014981-0.028560

(5)显示列切片——保留所有行

df.iloc[:,1:3]
BC
2013-01-01-0.6136430.111717
2013-01-02-1.447527-1.390847
2013-01-031.277674-0.634270
2013-01-04-1.069098-0.567669
2013-01-05-2.1167710.745177
2013-01-06-0.689503-0.401462

(6)显示获取一个值

#取出第一行第一列的数值
df.iloc[1,1]
-1.4475274167250514

(7)快速访问一个标量——等同上个方法

df.iat[1,1]
-1.4475274167250514

十二、导入和保存数据

导入csv文件时,添加列名的方式为:

x0=pd.read_csv(input_file, header=None, names=Feature)

若数据以tab分隔,则读取时可以去除的方式,如下:

df = pd.read.csv('../input/data_train.csv', sep='\t', encoding='GBK')

可以用sep参数进行去除;

转载于:https://www.cnblogs.com/hugechuanqi/p/9839638.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值