教你如何快速用python实现列转行

我们今天给大家分享一波python当中,列转行的骚操作。

最原始的需求如下:

图片

需要达到如下目的:

图片

换句话说,每家被投企业要一一对应一家投资企业。当pandas版本很低的时候,没有什么好的方法直接实现,操纵起来比较繁琐,通过升级pandas达到0.25版本以上,pandas就提供了explode方法来出来像上面的这种情况。

首先我们先用之前的方法来实现,最后再用explode方法来实现,进行相互对比。

下面我们用4种方法来实现:

图片

方法一

import pandas as pddf = pd.DataFrame({"投资企业":["xxx清奇科技有限公司","xxx宇塔字节科技有限公司","xxx金羽新能科技有限公司"],                   "被投企业":["xxx电波科技有限公司","xxx宇塔健康科技有限公司,xxx优叶堂健康科技有限公司",                           "xxx金羽新能源科技有限公司,xxx河金羽新能科技有限公司"]})df1 = df['被投企业'].str.split(",")print(df1)

我们先用字符串的split方法,按","分隔,没一行会形成一个列表,如下:

图片

然后我们再分别创建两个列表,from_investment_list 和 to_investment_list。我们再通过两个循环遍历存储,外层循环遍历被投企业,内层循环遍历每行列表的元素,代码如下:

from_investment_list = []to_investment_list = []for i,name in enumerate(df1):    for j in name:        from_investment_list.append(df['投资企业'][i])        to_investment_list.append(j)df2 = pd.DataFrame({"投资企业":from_investment_list,"被投企业":to_investment_list})print(df2)

效果如下:
在这里插入图片描述

图片

方法二

方法二和方法一有些相似,同样建立两个列表,from_investment_list 和 to_investment_list。再用zip方法遍历投资企业和被投企业,代码如下:

import pandas as pddf = pd.DataFrame({"投资企业":["xxx清奇科技有限公司","xxx宇塔字节科技有限公司","xxx金羽新能科技有限公司"],                   "被投企业":["xxx电波科技有限公司","xxx宇塔健康科技有限公司,xxx优叶堂健康科技有限公司",                           "xxx金羽新能源科技有限公司,xxx河金羽新能科技有限公司"]})from_investment_list = []to_investment_list = []for from_name,to_names in zip(df["投资企业"],df["被投企业"]):    for name in to_names.split(","):        from_investment_list.append(from_name)        to_investment_list.append(name)df1 = pd.DataFrame({"投资企业":from_investment_list,"被投企业":to_investment_list})print(df1)

效果如下:

图片

图片

方法三

先上代码

import pandas as pddf = pd.DataFrame({"投资企业":["xxx清奇科技有限公司","xxx宇塔字节科技有限公司","xxx金羽新能科技有限公司"],                   "被投企业":["xxx电波科技有限公司","xxx宇塔健康科技有限公司,xxx优叶堂健康科技有限公司",                           "xxx金羽新能源科技有限公司,xxx河金羽新能科技有限公司"]})df = df.drop("被投企业",axis = 1).join(df["被投企业"].str.split(",",expand = True).stack().reset_index(level=1,drop = True).rename("被投企业"))print(df)

代码分解:

① 我们先用split方法进行分隔,再加一个参数,expand = True,可以把每一行的元素,转换成列,里面的元素不够,则以None值填充。

df1 = df["被投企业"].str.split(",",expand = True)print(df1)

图片

②通过stack方法,level默认为-1,从列轴堆叠到索引上的级别轴,定义为一个索引或标签或索引列表或标签。

df1 = df["被投企业"].str.split(",",expand = True)df2 = df1.stack()print(df2)

图片

③我们重置索引,reset_index(level=-1,drop=True),level = 1带表删除两个索引,默认删除全部。drop = True 代表删除原有索引。

df1 = df["被投企业"].str.split(",",expand = True)df2 = df1.stack()df3 = df2.reset_index(level=1,drop = True)print(df3)

图片

df1 = df["被投企业"].str.split(",",expand = True)df2 = df1.stack()df3 = df2.reset_index(level=1,drop = True)df4 = df.drop("被投企业",axis = 1).join(df3.rename("被投企业"))print(df4)

图片

这一步可能大家,有的小伙伴可能不太理解,是如何用join方法拼接的。这里我再给大家细分如下:

df1 = df["被投企业"].str.split(",",expand = True)df2 = df1.stack()df3 = df2.reset_index(level=1,drop = True)df4 = df.drop("被投企业",axis = 1)print(df4)

图片

通过对应的索引来连接的,和merge、append、concat有异曲同工之妙。

方法四

最后,王炸方法来了。什么都不说,先上代码

df['被投企业'] = df['被投企业'].str.split(",")df1 = df.explode('被投企业')print(df1)

图片

这个就是我们开头的给大家说的explode方法,是不是非常简单,以后遇到此类情况,我们可以优先考虑方法四。

对于这么高效的exlode方法,大家也可以阅读源码,简单如下

图片
-END-


学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、自动化测试带你从零基础系统性的学好Python!

👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享]安全链接,放心点击

👉Python学习大礼包👈

在这里插入图片描述

👉Python学习路线汇总👈

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取哈)
在这里插入图片描述

👉Python必备开发工具👈

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python书籍和视频合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

👉Python面试刷题👈

👉Python副业兼职路线👈

在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以点击链接免费领取或者保存图片到wx扫描二v码免费领取保证100%免费

👉[CSDN大礼包:《python安装工具&全套学习资料》免费分享]安全链接,放心点击

  • 17
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值