当前位置:首页 > 编程笔记 > 正文
已解决

4. Pandas行列操作

来自网友在路上 193893提问 提问时间:2023-11-22 02:04:52阅读次数: 93

最佳答案 问答题库938位专家为你答疑解惑

4.1 新增列

4.1.1 assign

Pandas中的assign()函数不仅可以实现不改变原数据情况下新增列,而且可以同时新增多列,还可以配合链式操作使用一行代码完成多个新增列创建,使得代码非常整洁。

(1)函数

# 新增列Sex_map,映射male为0,female为1
df.assign(Sex_map=lambda x:x.Sex.map({'male':0, 'female':1}))df.assign(Sex_map=df['Sex'].map({'male':0, 'female':1})

(2)多列

新增多列时,按照前后顺序,后面列创建的计算过程中可以使用前面已创建的列。

df.assign(Sex_map=lambda x:x.Sex.map({'male':0, 'female':1}),Sex_age=lambda x:x.Sex_map*x.Age)

(3)链式

df.assign(Sex_map=lambda x:x.Sex.map({'male':0, 'female':1})).\assign(Sex_age=lambda x:x.Sex_map*x.Age)# 不同写法
(df.assign(Sex_map=lambda x:x.Sex.map({'male':0, 'female':1})).\ 		   assign(Sex_age=lambda x:x.Sex_map*x.Age)
)

4.2 插入列

4.2.1 insert

### 对Sex变量加工一个新的变量,并且插入到Sex变量之后
df.columns.get_loc('Sex')
--------------
4df.insert(loc=5,columns='Sex_map',value=df['Sex'].map({'male':0, 'female':1})

4.3 移除列

4.3.1 pop

pop( )可以移除指定列,但参数只接受一个列名,不能同时移除多列,并且在未找到要移除的列名还会提示报错。

df.pop('Sex_map')

4.3.2 difference(更好)

将不在列表中的列名全部筛选出来,然后再用列名筛选匹配的数据。

df[df.columns.difference(['Sex', 'Sex_map'])]

4.4 列转行

dic_0 = {'球队':['湖人', '勇士', '凯尔特人'],'球员':[['詹姆斯','戴维斯','里弗斯'],['库里','汤普森','格林'],['塔图姆','布朗','霍乐迪']]
}
df = pd.DataFrame(dic_0)

4.4.1 explode

(1)重置索引

df.explode('球员', ignore_index=True)     # ignore_index=True重置索引

(2)去重

df.explode('球员').drop_duplicates()

(3)格式调整

explode( )的column参数只能处理列表形式的对象,若原数据中没有explode可接受的格式,需要进行转换。

dic_0 = { '球队':['湖人', '勇士', '凯尔特人'], '球员':['詹姆斯,戴维斯,里弗斯', '库里,汤普森,格林', '塔图姆,布朗,霍乐迪']  } 
df = pd.DataFrame(dic_0)df['球员'] = df['球员'].str.split(',')

4.5 行转列

行转列是列转行的反向操作,即将多行数据合并后转成一个列表。

4.5.1 groupby聚合

(1)apply

df.groupby('球队').apply(lambda df:df['球员'].tolist().\reset_index().rename(columns={0:'球员'})

(2)agg

df.groupby(['球队'])['球员'].agg(list).to_frame().reset_index()

查看全文

99%的人还看了

相似问题

猜你感兴趣

版权申明

本文"4. Pandas行列操作":http://eshow365.cn/6-41724-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!