pandas实现将单行多信息分割

这篇博客介绍了一种方法,用于处理数据库导入时单行数据包含多个信息的情况,如人员的多个电话和邮箱。作者通过Python的pandas库实现数据拆分,定义了`insert`和`last_insert`函数进行插入操作,并提供了一个名为`split_sth`的函数来遍历和拆分行数据。虽然现有实现对于5000行数据需要约1分钟,但这种方法为处理多信息数据行提供了一个基础框架。
摘要由CSDN通过智能技术生成

在做数据库数据导入时经常遇到单行数据存储多个信息,比如一个人的多个电话,多个邮箱,再或者是公司多个办公点等等
比如:
A公司 员工a,员工b 公司地址
我这的目的就是把上面的df拆分成下面这种
A公司 员工a 公司地址
A公司 员工b 公司地址
能力有限,逻辑就是暴力拆解,insert函数把特定多信息的给应拆分了,加到前面,然后再判断到最后一行了,再用第二个insert把原本数据给忽略掉,实测5000行数据大概要一分钟左右。有用的话,点个赞~

import pandas as pd
df=pd.read_excel(r'D:\New folder\x.xlsx')
df

def insert(df, i, add,detail):
    df1 = df.iloc[:i, :]
    df2 = df.iloc[i:, :]
    df_add=df.iloc[i].to_dict()
    df_add[add]=detail
    df_add=pd.DataFrame(df_add,index=[0])
    df_new = pd.concat([df1, df_add, df2], ignore_index=True)
    return df_new

def last_insert(df, i, add,detail):
    df1 = df.iloc[:i, :]
    df2 = df.iloc[i+1:, :]
    df_add=df.iloc[i].to_dict()
    df_add[add]=detail
    df_add=pd.DataFrame(df_add,index=[0])
    df_new = pd.concat([df1, df_add, df2], ignore_index=True)
    return df_new


def split_sth(df,c):
    plist=df[c].to_list()
    i=0
    x=0
    #我这是用“,”分割的数据,其他符号直接替换split里的内容就行
    while i in range(len(plist)):
        if len(str(plist[i]).split(','))>1:
            s=0
            print(str(plist[i]).split(','))
            while s in range(len(str(plist[i]).split(','))):
                print(i)
                if s != len(str(plist[i]).split(','))-1:
                    df=insert(df, x, c,str(plist[i]).split(',')[s])
                    x+=1
                    s+=1
                else:
                    df=last_insert(df, x, c,str(plist[i]).split(',')[s])
                    x+=1
                    s+=1
                
        else:
            x+=1
        i+=1  
    return df
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值