羽中飞人 2021-05-03 17:59 采纳率: 52%
浏览 115
已采纳

关于用pandas.read_csv函数 清洗txt文本数据的问题

文件如下图所示,是药品的说明书

这个文本文件里有几十万个这样的商品资料
我要把这个文本文件处理成一个表格

就是把每一行的说明书抬头【】里的文字,作为pandas表格的列名,把后面的内容作为这一列的内容
有简便的方法实现吗

  • 写回答

2条回答 默认 最新

  • 关注

    你这是公开数据集吗?如果是,麻烦也发我个连接,如果不是那就算了。我刚才写了份代码,应该是能实现你的要求

    # -*- coding:utf-8 -*-
    import pandas as pd
    import re
    import numpy as np
    import os
    import glob
    pd.set_option('display.max_columns', None)  #设置显示总行数
    
    
    def max_columns_dataframe(data_path):
        #返回药品说明书中最多的列
        num = []
        for i,path in enumerate(data_path): #
            df = pd.read_csv(path,encoding="utf-8")
            columns = df[df.columns.tolist()[0]].apply(lambda x:str(x)[:str(x).find("】")].replace("【","")) 
            num.append(len(columns))
        file = data_path[num.index(max(num))] #找出列明最多的文件
        df = pd.read_csv(file,encoding="utf-8")
        columns = df[df.columns.tolist()[0]].apply(lambda x:str(x)[:str(x).find("】")].replace("【","")) 
        columns_name = columns.values.tolist()
        index = re.findall("\d", df.columns.tolist()[0], flags=0)[0]  #获取商品ID
        dicts = dict.fromkeys(columns_name)
        pf = pd.DataFrame([dicts],index=[index])  #创建新datafrom    
        return pf.dropna()
    
    data_path = glob.glob("*txt")
    pf = max_columns_dataframe(data_path)
    #添加数据
    for file in data_path:
        df = pd.read_csv(file,encoding="utf-8")
        columns = df[df.columns.tolist()[0]].apply(lambda x:str(x)[:str(x).find("】")].replace("【",""))
        columns_name = columns.values.tolist()
        index = re.findall("\d", df.columns.tolist()[0], flags=0)[0]  #获取商品ID
        dicts = dict.fromkeys(columns_name)
        tf = pd.DataFrame([dicts],index=[index])  #创建新datafrom
        for i,j in zip(columns_name,df.values.tolist()):
            if j[0].find(i) == 1:
                #tf[i] = df.values.tolist()[0][0].split("】")[1]
                tf[i] = j[0].split("】")[1]
            else:
                tf[i] = np.nan
        pf = pd.concat([pf,tf])
    pf.sort_index(inplace=True) #根据索引排序
    pf.to_csv("药品说明书预处理.csv")    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 我下载图形界面重启完就变成这样了,打字也打不了,动也动不了,该怎么解决(操作系统-centos)
  • ¥15 VBA中在窗体中遍历所有checkbox控件,提取出被选中的checkbox的caption值
  • ¥15 在Ubuntu上有什么命令,或者是系统文件能告诉我链接nvme ssd的pcie槽位是不是支持热插拔功能?
  • ¥15 ansys license许可证问题
  • ¥20 QQ号和密码都能正常登录微信 QQ号和密码登录微信显示密码错误
  • ¥15 qiankun主应用注册子应用提示跨域
  • ¥15 单片机RTOS Kernel与应用分离开发,Kernel如何调起应用?
  • ¥15 快手小店商家版APP怎么第三方APP跳转到指定用户聊天界面
  • ¥15 为什么AVL fire软件仿真时的步长改变了,仿真结果也会改变
  • ¥100 如何帮我写一个java小游戏