清晰明了的DataFrame行列处理

本文详细介绍了如何在Python的pandas库中操作DataFrame,包括使用中括号提取行列,通过列名、列序号、自定义索引及bool数组选择行和列。此外,还讲解了利用rename方法修改行和列的名称,内容涵盖了单列、多列、行切片以及使用callable对象的各种情况。
摘要由CSDN通过智能技术生成

前言

python里的东西都太过灵活,这篇文章是为了梳理一下DataFrame的提取行列操作。先定义以下DataFrame,df.

import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(12).reshape(3,4),columns=list('ABCD'))
print(df)

结果:

   A  B   C   D
0  0  1   2   3
1  4  5   6   7
2  8  9  10  11
df2 = pd.DataFrame(np.arange(12).reshape(3,4),columns=list('ABCD'),index=['Jerry','John','Sam'])
print(df2)

结果:

       A  B   C   D
Jerry  0  1   2   3
John   4  5   6   7
Sam    8  9  10  11

处理,提取行和列

df[]

中括号既可以用来提取行,也可以用来提取列,区分两种方式的用法十分重要。
如果是默认index(第一行从0开始),那么用df[]基本无法处理行

df[]处理列

自定义索引、list、结合df.columns,Callable对象

1. 用自定义索引(列名)提取单列
df['A'] 

结果:

0    0
1    4
2    8
Name: A, dtype: int32
df2['A']

结果:

Jerry    0
John     4
Sam      8
Name: A, dtype: int32
2. 用list提取多列
df[['A','C']] 

结果:

AC
002
146
2810
df2[['A','C']] 

结果:

AC
Jerry02
John46
Sam810
3. 结合df.columns用列序号提取单列/多列
  1. df.columns[0]是用来选取自定义索引(列名)的(上文1.)
  2. df.columns[[0,2]]是用来选取列名的list的(上文2.)
df[df.columns[0]] 

结果:

0    0
1    4
2    8
Name: A, dtype: int32
df2[df.columns[0]] 

结果:

Jerry    0
John     4
Sam      8
Name: A, dtype: int32
df[df.columns[[0,2]]] # 结合df.columns用列序号提取多列

结果:

AC
002
146
2810
df2[df.columns[[0,2]]]

结果:

AC
Jerry02
John46
Sam810
df[df.columns[0:3]] # 结合df.columns用列序号提取多列

结果:

ABC
0012
1456
28910
df2[df.columns[0:3]]

结果:

ABC
Jerry012
John456
Sam8910
4. callable对象

各种函数(少不了我们的lambda)

df[lambda x: df.columns[3]]

结果:

0     3
1     7
2    11
Name: D, dtype: int32
def chooseCol(x):
    return df.columns[x]

df[chooseCol(1)]

结果:

0    1
1    5
2    9
Name: B, dtype: int32
df[]处理行

默认索引,自定义索引,bool数组

1. 默认索引
df[:1]

结果:

ABCD
00123
df2[:1]

结果:

ABCD
Jerry0123
2. 自定义索引
df[0:2] # 只要行索引是int型就无法使用自定义索引,原因应该是无法识别字符串和int,大家也可以试一试将index换成[1,2,3]看看效果如何

结果:

ABCD
00123
14567
df2['Jerry':'Sam'] # 注意自定义索引左右都是闭区间,所以Jerry行和Sam行都被选中了

结果:

ABCD
Jerry0123
John4567
Sam891011
3. bool数组
df[[True,False,True]] # 选了True的才会被选中

结果:

ABCD
00123
2891011
df[df.duplicated()] # df.duplicated()返回的是bool数组,如果行有重复,默认返回第一项为True,其余为False;如果行没重复,返回的就是False。

结果:

ABCD

修改行和列的名称

df.rename()
比较重要的参数:mapper, index, columns, axis, inplace.

  1. mapper = 字典,将要替换的行名或列名传入字典
  2. index = mapper 等价于 mapper, axis = 0
  3. columns = mapper 等价于 mapper, axis = 1
  4. axis = 0代表行,axis=1代表列
  5. inplace = True就是直接更改,返回None;inplace = False就会返回一个更改过的数组
df.rename({'A':'a'} ,axis = 1,inplace=True)
print(df)
print(df.rename(mapper = {'a':'A'} ,axis = 1))
print(df.rename(columns={'B':'bbbb'}))
print(df.rename(index={0:'aaa'}))
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值