pandas日常数据处理

这篇博客总结一些pandas的常用处理方法,直接结合例子,使用时直接复制代码即可,希望能够帮助到大家。

这里面series表示Series类型对象,dataframe表示Dataframe类型对象,使用替换变量名即可。

目录

1 行/列/单元格 选择

1.1 通过索引选择

1.2 通过位置选择

1.3 得到指定区域/单元格

2 循环处理数据

2.1 直接循环行

2.2 循环Dataframe的每一行/列 apply()

2.3 循环Series的每一行 map()

2.4 循环处理每个元素 applymap()

2.5 pandas对一列隔行计算

3 内容筛选

3.1 根据索引删除行/列

3.2 按条件筛选

3.3 特殊筛选方法

3.3.1 去掉重复数据

3.3.2 去掉空值

3.4  统计Dataframe某一列/series 的不同值

3.5 删除Dataframe前N行或后N行

4 索引/数值/类型替换

4.1 转置

4.2 修改行/列索引

4.3 Dataframe转list

参考资料:


1 行/列/单元格 选择

1.1 通过索引选择

选择行(2种方法):

dataframe.loc[行索引]
dataframe.loc[[行索引],:]

选择列(2种方法):

dataframe[列索引]
dataframe.loc[:,[列索引]]

1.2 通过位置选择

(用法与通过下标选择神似)

选择行(2种方法):

dataframe.iloc[行位置] # 0为第一个
dataframe.iloc[[行位置],:]

选择列(2种方法):

dataframe[列位置]
dataframe.loc[:,[列位置]]

1.3 得到指定区域/单元格

通过行索引+列索引得到指定区域:

dataframe.loc[[行索引],[列索引]] # 可以直接得到单元格的值

通过行位置+列位置得到指定区域:

dataframe.iloc[[行位置],[列位置]]

当 索引or位置为一个具体的值的时候就会锁定唯一的单元格

2 循环处理数据

2.1 直接循环行

这个方法暴力简单,博主初学的时候经常这样做...

循环Dataframe的每一行:

for index,row in df.iterrows():
    # index 为行索引
    # row 为Dataframe这一行数据组成的Series类型的对象
    # 使用 row['列索引']得到想要的具体值

循环Series的每一行:

for row in series:
    # row就是每一行的数据

2.2 循环Dataframe的每一行/列 apply()

逐行循环:

def sov(x):
    # return x[列索引] # 相当于逐行读取Dataframe

dataframe['新列'] = dataframe.apply(sov,axis=1)

逐列循环:

def sov(x):
    # return x[0] # x为每一列构成的Series

dataframe.apply(sov)

2.3 循环Series的每一行 map()

def sov(x):
    # return x # 对Series每个元素的处理逻辑

dataframe[索引].map(sov)

2.4 循环处理每个元素 applymap()

def sov(x):
    # return x # 对Dataframe每个元素的处理逻辑

dataframe.applymap(sov)

它会先逐列,再逐个地循环执行函数

2.5 pandas对一列隔行计算

这里巧用apply函数:

def get_first_difference(x):
    # 这里计算了一阶差分
    # shift(1) 至数据向下移一位后这个位置的数据,可以认为是上一个值,如果没有值,则为NaN
    return x - x.shift(1)

dataframe = dataframe.apply(get_first_difference)

3 内容筛选

3.1 根据索引删除行/列

删除列:

dataframe.drop([列索引],axis=1,inplace=True) # 直接在原有dataframe上处理,不需要接收返回值

删除行:

dataframe.drop([行索引],axis=0,inplace=True) # 直接在原有dataframe上处理,不需要接收返回值

3.2 按条件筛选

请看这篇博客:https://blog.csdn.net/weixin_35757704/article/details/89280715#2.2.1%20%E6%A0%B9%E6%8D%AE%E7%A1%AE%E5%AE%9A%E6%9D%A1%E4%BB%B6%E7%AD%9B%E9%80%89%E6%95%B0%E6%8D%AE

3.3 特殊筛选方法

3.3.1 去掉重复数据

Series经过处理后,原来series中每个不同的值都只会出现一次。

series.drop_duplicates(inplace=True)

Dataframe同样适用这个方法处理数据

dataframe.drop_duplicates(inplace=True)

但是默认的参数会全部相同,才会去除,如果判定某些列中有相同的内容就删去这些行,那么就可以使用:

movies.drop_duplicates(['指定列'], 'first', inplace=True)

3.3.2 去掉空值

dataframe.dropna(inplace=True)

3.4  统计Dataframe某一列/series 的不同值

dataframe['列名'].value_counts()
series.value_counts()

3.5 删除Dataframe前N行或后N行

dataframe.dorp(dataframe.head(n).index,inplace=True) # 从头去掉n行
dataframe.drop(dataframe.tail(n).index,inplace=True) # 从尾部去掉n行

 

4 索引/数值/类型替换

4.1 转置

dataframe.T

4.2 修改行/列索引

修改行索引:

dataframe.index = [新行索引]
# 行索引的总数需要与行数相等
# dataframe.index = list(range(0,dataframe.shape[0])) # 直接得到从0开始递增的下标序列

修改列索引:

dataframe.columns = [新的列索引] # 索引总数与列数相等

# 下面的代码可以生成从0开始递增的列索引
#dataframe.columns = list(range(0,dataframe.shape[1]))

4.3 Dataframe转list

# index转list
list(dataframe.index)
# values转list
dataframe.values.tolist()

 

 

 

参考资料:

Pandas选取行,列总结:https://www.jianshu.com/p/32bfb327bf07

DataFrame的apply()、applymap()、map()方法:https://blog.csdn.net/qq_20412595/article/details/81131502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值