pandas学习笔记

这篇博客详细介绍了pandas库,包括Series和DataFrame的初始化、索引、查看数据、数据操作,以及数据清洗、离散化、排序、分组、合并等核心功能。内容涵盖缺失值处理、异常值处理、数据重塑、时间序列分析和数据透视表等,是学习和使用pandas的全面参考资料。
摘要由CSDN通过智能技术生成

一、pandas库的Series类型

1、初始化

1、一维Series可以用一维列表初始化

a=pd.Series([1,3,5,np.nan,6,5])

2、索引

1、默认的情况下,Series的下标都是数字(可以使用额外参数指定),类型是统一的

b=pd.Series([1,3,5,np.nan,6,5],index=['a','b','c','d','e','f'])
print(b)

2、索引——数据行标签

a.index

3、取值

a.values

4、切片

a[2:5]

5、索引赋值

a.index=list('abcdef')

6、根据默认索引取值

ser.value_count().index[0:2]

3、查看数据

1)Series.take(参数)

Series.take(indices, axis=0, convert=None, is_copy=True, **kwargs)

参数说明:

参数 说明
indices 一个整数数组,指示要采取的位置。
axis 选择元素的轴。0:行,1:列
convert 是否将负指数转换为正指数
is_copy 是否返回原始对象的副本。
Series.take(indices, axis=0, convert=None, is_copy=True, **kwargs)
例:
sr = pd.Series(['New York', 'Chicago', 'Toronto', 'Lisbon', 'Rio', 'Moscow']) 
sr.take(indices = [0, 2])#获取了sr中第1个和第3元素

二、DataFrame类型

1、初始化

1)传入二维数组
df=pd.DataFrame(np.random.randn(6,4))
df    ##默认使用0、1、2.。。作为索引index
2)传入一个字典
df1=pd.DataFrame({
   'A':1,'B':pd.Timestamp('20200101'),'C':pd.Series(1,index=list(range(4)),dtype=float),'D':np.array([3]*4,dtype=int),'E':pd.Categorical(['test','train','test','train']),'F':'abc'})
df1
3)读取文件
df_mv=pd.read_excel(r'路径')

4)列表重塑

li.reshape

#将系列重塑ser为具有 7 行 5 列的数据框
ser = pd.Series(np.random.randint(1, 10, 35))
df=pd.DataFrame(ser.values.reshape(7,5))

2、索引

1)df.columns=[列标]

设值列表

2)df.index=[行号]
3)df.loc[[index],[column]]

df.loc[[index],[column]]通过标签选择数据

df.loc[[index],[column]]通过标签选择数据
df_mv.loc[[1,3,4],['名字','评分']]
4)条件选择
df_mv[df_mv['产地']=='中国大陆'][:5]
df_mv[(df_mv.产地=='美国')&(df_mv.评分>9)].head()
df_mv[((df_mv.产地=='美国')|(df_mv.产地=='中国大陆'))&(df_mv.评分>9)].head()

5)df.rename()

于更改行列标签,即行和列的索引,可以传入一个字典或则一个函数。

df.rename(index={
   ...}columns={
   ...})
df.rename()用于更改行列标签,即行和列的索引,可以传入一个字典或则一个函数。

df.rename(lambda x:x+11)#索引从11开始排
df.rename(index={
   0:'a',1:'b'})

6)df.reindex()

重新索引:DataFrame

DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)

参数说明:

参数 说明
labels 新标签/索引使“ axis”指定的轴与之一致。
index, columns 要符合的新标签/索引。最好是一个Index对象,以避免重复数据
axis 轴到目标。可以是轴名称(“索引”,“列”)或数字(0、1)。
method {None,“ backfill” /“ bfill”,“ pad” /“ ffill”,“ nearest”},可选
copy 即使传递的索引相同,也返回一个新对象
level 在一个级别上广播,在传递的MultiIndex级别上匹配索引值
fill_value 在计算之前,请使用此值填充现有的缺失(NaN)值以及成功完成DataFrame对齐所需的任何新元素。如果两个对应的DataFrame位置中的数据均丢失,则结果将丢失。
limit 向前或向后填充的最大连续元素数
tolerance 不完全匹配的原始标签和新标签之间的最大距离。匹配位置处的索引值最满足方程abs(index [indexer]-target)
df.reindex(range(len(df)))
7)df.set_index()

DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False)

参数说明:

参数 说明
keys 列标签或列标签/数组列表,需要设置为索引的列
drop 默认为True,删除用作新索引的列
append 是否将列附加到现有索引,默认为False
inplace 输入布尔值,表示当前操作是否对原数据生效,默认为False。True:即改变原来的索引
verify_integrity 检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为false将提高该方法的性能,默认为false。
#将PassengerId设置为索引
df.set_index('PassengerId')

3、查看数据

1)df.head(n)
2)df.tail(n)

head和tail方法可以分别查看最前面几行和最后面几行的数据(默认为5)

3)df.index

下标使用index属性查看

4)df.columns

列标使用columns属性查看

5)df.values

数据值使用values查看

6) df.iloc[索引/切片]

显示行,左闭右开

7)df.loc[[行],[列]]

选择数据,左闭右闭

8)df.shape

显示现状

9)df.ndim

显示维度

10)df[列].dtype

列数据类型

11)df.info()

相关信息概览

12)df.describe()

综合统计结果

13)df.loc[a1,a2]

标签索引:只能是定标签名字,即自定义索引

参数说明:

参数 说明
a1 行标签,可以切片,也可以为一个列表
a2 列标签,可以切片,也可以为一个列表
14)df.iloc[a1,a2]

位置索引:只能通过原始的索引,不能使用自定义索引

参数说明:

参数 说明
a1 行标签,可以切片,也可以为一个列表
a2 列标签,可以切片,也可以为一个列表

15)df.ix[a1,a2]

混合索引:即可用位置索引,也可以用户标签索引

16)df.query()

df.query(expr, inplace = False, **kwargs)

参数说明:

参数 说明
expr 要评估的查询字符串;
可以在环境中引用变量,在变量前面加上@字符(@a+b);
也可以通过在反引号中将空格或运算符括起来来引用它们
inplace 查询是应该修改数据还是返回修改后的副本
1 #  查询B列中数值为2的行记录

print(df.query('B == 2'))
 
2 #查询A列数值小于B列的行记录
print(df.query('A < B'))
# 等价于
print(df[df.A < df.B])

3 #查询B列数值和C C列相等的行记录

#注:对于名称中带有空格的列名,python2可以用反引号引用,但是python3已经取消了,所以可以用下面的方法
print(df[df.B == df['C C']])

4 #查询A列小于B列,且A列小于C C列的数据
#注意对于C C列的列名中间有空格或运算符等其他特殊符号的情况,上文提到,要用反引号(就是键盘上第二排第一个按键,有‘~’这个符号的按键)。
df.query('A < B & A < `C C`')
17)df.dtypes

查看各列(Series)类型

#查看每个列的数据类型
pokemon.dtypes
18)s.unique()

获取唯一值,返回一个列表

df['item_name'].unique()#返回该列所有唯一值,一个列表
19)s.nunique()

获取唯一值的个数,返回一个数字,可用于DataFrame

df['item_name'].nunique()#返回一个数字

df.nunique()#作用于dataframe,返回各列唯一值的数量

out:order_id              1834
quantity                 9
item_name               50
choice_description    1043
item_price              78
dtype: int
20)s.vlaue_counts()

计算每个唯一值的频率计数。

value_counts()是一种查看表格某列中有多少个不同值的快捷方法,并计算每个不同值有在该列中有多少重复值。
value_counts()是Series拥有的方法,一般在DataFrame中使用时,需要指定对哪一列或行使用

默认是会降序的

df['年代'].value_counts()[:10]#计算列取重后的值数量

#在choice_description中,下单次数最多的商品是什么?
df['choice_description'].value_counts().head(1)
21)df.filter()

df.filter(items=None, like=None, regex=None, axis=None)

参数说明:

参数 说明
item 对列进行筛选
like 表示用正则进行匹配
regex 进行筛选
axis axis=0表示对行操作,axis=1表示对列操作

其中的参数 items, like, 和 regex parameters 被强制执行为相互排斥,即只能有一个存在

22)df.any() and df.all()

1、df.all(axis=0, bool_only=None, skipna=True, level=None)

返回是否所有元素都为真(可能在轴上),即都为镇才返回

参数说明:

参数 说明
axis 0或’index’;1或’columns’;None。默认为0。指出哪个轴应该减少。0或’index’:减少索引,返回索引为原始列标签的Series。1或’columns’:减少列,返回一个索引为原始索引的Series。None:减少所有轴,返回一个标量。
skipna 默认 True,排除NA/null值。如果整个row/column为NA,并且skipna为True,那么对于空row/column,结果将为True。如果skipna是False,那么NA就被当作True,因为它们不等于零。

2、df.any(axis=0, bool_only=None, skipna=True, level=None)

返回是否至少一个元素为真,即有一个为真则返回

23)s.diff()

计算相对于当前的前一个值的差,本行与前一行的差

#计算前一天与后一天收盘价的差值
df['收盘价(元)'].diff()
#等价于
df['收盘价(元)']-df.shift()['收盘价(元)']
24)s.pct_chang()

计算与前一行的变化量

#计算前一天与后一天收盘价变化率
df['收盘价(元)'].pct_change()
#计算前两天的收盘价变化率
df['收盘价(元)'].pct_change(2)

3、数据操作

1)行的 操作
1、查看行数据
df_mv.iloc[0]
df_mv.iloc[0:5]#左闭又开
df_mv.loc[0:5]#左闭右闭

2、添加一行
dit={
   '名字':'复仇者联盟3',
     '投票人数':123456,
     '类型':'剧情/科幻',
     '产地':'美国',
     '上映时间':'2017-05-04 00:00:00',
     '时长':142,
     '年代':2017,
     '评分':8.7,
     '首映地点':'美国'}
s=pd.Series(dit)
s.name=38738
df_mv=df_mv.append(s)
3、删除一行
df_mv=df_mv.drop([行号])
4、df.drop()

df.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors=‘raise’)

参数说明:

参数 说明
labels 待删除的行名or列名;
axis 删除时所参考的轴,0为行,1为列;默认是0
index 待删除的行名
columns 待删除的列名
level 多级列表时使用,暂时不作说明
inplace 布尔值,默认为False,这是返回的是一个copy;若为True,返回的是删除相应数据后的版本
2)列的操作
1、查看列数据
df_mv['列名'][0:5]
df_mv[['列1','列2']][:5]
2、增加一列
df_mv['列名']=range(1,len(df_mv)+1)列每行的内容
3、插入一列 df.insert()

DataFrame.insert(loc, column, value, allow_duplicates=False)

参数 说明
loc 参数column插入的位置,如果想插入到第一例则为0,取值范围: 0 <= loc <= len(columns),其中len(columns)为Dataframe的列数
column 给 插入数据value取列名,可为数字,字符串等
value 可以是整数,Series或者数组等
allow_duplicates 默认 False,如果想完成重复值的插入需要把allow_duplicates设置为True
df.insert(想要插入的索引,列名,数据)  # 数据可以为数组或Series
frame.insert(0, 'num', np.ones(5))
4、删除一列
df_mv=df_mv.drop('序号',axis=1)
3)移动行或列

df.shift()

df.shift()#整体向下移动一行,顶行填充nan
df.shift(3)#整体向下移动三行,顶部填充nan
df.shift(-1)#向上移动一行
df.shift(1,axis=1)#向右移动一列
df.shift(-1,asis=1)#向左移动一列
df['收盘价(元)']-df.shift()['收盘价(元)']#实现了df['收盘价(元)'].diff()

4、对齐运算

使用后df+df默认的是有相同标签的会相加,没有则以nan填充,其他也类似

单词:

单词 意思
add
subtract
multiply
divide
power 乘方
算术运算表:
方法 描述
add,radd 加法(+)
sub,rsub 减法(-)
div,rdiv 除法(/)
floordiv,rfloordiv 整除(//)
mul,rmul 乘法(*)
pow,rpow 幂次方(**)
注释: 带有r开头的表示它运算会翻转,后面的算数前面的,如df1.div(df2)表示df1/df2,而df1.rdiv(df2)表示df2/df1
df1.add(df2,)

df1.add(df2,level=None, fill_value=None, axis=0)

返回算数运算的结果

参数说明:

参数 说明
fill_value 添加前要在系列/列表中用NaN替换的值,如果两个df对应的行列都为nan则返回nan
level 多索引时级别的整数值
df1.add(df2,fill_value=0)  # df1加df2,如果有nan则填充为0运算
df1.sub(df2,fill_value=0)  # df1减df2,如果有nan则填充为0运算
df1.mul(df2,fill_value=0)  # df1乘df2,如果有nan则填充为0运算
df1.div(df2,fill_value=0)  # df1除df2,如果有nan则填充为0运算

三、数据清洗

函数 描述
df.isnull 返回一个布尔值对象,判断哪些值是缺失值
df.notnull isnull的否定式
df.fillna 对缺失值进行填充
df.dropna 根据标签中的缺失值进行过滤,删除缺失值

1、缺失值处理

1)判断缺失值

df.isnull()

df_mv[df_mv['名字'].isnull()].head()
df.isnull().sum().sort_values(ascending=False)#判断每一列的缺失值个数,并降序排序

2)填充缺失值

df.fillna()

fillna参数说明:

参数 说明
inplace True:直接修改原对象,False:创建一个副本,修改副本,原对象不变(缺省默认)
method 取值 : {‘pad’, ‘ffill’,‘backfill’, ‘bfill’, None}, default None,
pad/ffill:用前一个非缺失值去填充该缺失值,向前填充
backfill/bfill:用下一个非缺失值填充该缺失值,向后填充
None:指定一个值去替换缺失值(缺省默认这种方式)
limit 限制填充个数
axis 修改填充方向
df_mv['名字'].fillna('未知电影',inplace=True)

3)删除缺失值

df.dropna(axis=0, how=‘any’, thresh=None, subset=None, inplace=False)

dripna参数说明:

参数 说明
axis {0 or ‘index’, 1 or ‘columns’}, default 0,0 or ‘index’:删除包含丢失值的行, 1, or ‘columns’:删除包含丢失值的列
how {‘any’, ‘all’}, default ‘any’,‘any’: 只要有缺失值出现,就删除,‘all’: 所有的值都缺失,才删除
thresh int,保留含有int个非空值的行,如果缺失值(NaN)的数量大于thresh,将删除
subset 对特定的列进行缺失值删除处理,传入列表
inplace True:直接修改原对象,False:创建一个副本,修改副本,原对象不变(缺省默认)
df_mv1=df_mv.dropna()

4)插值填充

1、df.interpolate()

DataFrame.interpolate(method=‘linear’, axis=0, limit=None, inplace=False, limit_direction=None, limit_area=None, downcast=None, **kwargs)

参数说明:

参数 说明
method str,默认为‘linear’使用插值方法。
‘linear’:忽略索引,线性等距插值。这是MultiIndexes支持的唯一方法。
‘time’: 在以天或者更高频率的数据上插入给定的时间间隔长度数据。
‘index’, ‘values’: 使用索引的实际数值。
‘pad’:使用现有值填写NaN。
‘nearest’, ‘zero’, ‘slinear’, ‘quadratic’, ‘cubic’, ‘spline’, ‘barycentric’, ‘polynomial’: 传递给 scipy.interpolate.interp1d。这些方法使用索引的数值。‘polynomial’ 和 ‘spline’ 都要求您还指定一个顺序(int),例如 ,df.interpolate(method=‘polynomial’, order=5)
‘krogh’,‘piecewise_polynomial’,‘spline’,‘pchip’,‘akima’:包括类似名称的SciPy插值方法。
‘from_derivatives’:指 scipy.interpolate.BPoly.from_derivatives,它替换了scipy 0.18中的’piecewise_polynomial’插值方法。
axis {0或’index’,1或’columns’,None},默认为None;沿轴进行interpolate。
limit int;要填充的连续NaN的最大数量。必须大于0。
inplace bool,默认为False;如果可以,更新现有数据。
limit_direction {‘forward’,‘backward’,‘both’},默认为’forward’;如果指定了限制,则将沿该方向填充连续的NaN。
limit_area {None, ‘inside’, ‘outside’}, 默认为None;如果指定了限制,则连续的NaN将填充此限制。
None:无填充限制。
‘inside’:仅填充有效值包围的NaN。
‘outside’: 仅在有效值之外填充NaN。
s = pd.Series([0, 1, np.nan, 3])
s.interpolate()#线性等距插nan值

5)异常值处理

对于异常值,一般来说数量都会很少,在不影响整体数据分布的情况下,我们直接删除就可以了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XZ35DDk6-1640316998300)(图片\屏幕截图 2021-09-30 094301.png)]

6)重复值判断

df.duplicated(subset=None, keep=‘first’)

返回Boolean

参数说明:

subset=None 列标签或标签序列,可选# 只考虑某些列来识别重复项;默认使用所有列
keep {‘first’,‘last’,False}
# - first:将第一次出现重复值标记为True
# - last:将最后一次出现重复值标记为True
# - False:将所有重复项标记为True

7)删除重复值

data.drop_duplicates(subset=[‘A’,‘B’],keep=‘first’,inplace=True)

参数说明:

参数 说明
subset 列名,可选,默认为None
keep {‘first’, ‘last’, False}, 默认值 ‘first’
first: 保留第一次出现的重复行,删除后面的重复行。
last: 删除重复项,除了最后一次出现。
False: 删除所有重复项。
inplace 布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。
(inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。)

单词:

单词 意思
replication 复制
duplicate 无关要的)重复(某事),复制
inplace 原地
keep 保持,处于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值