Python 将txt文件导入数据帧时遇到困难

Python 将txt文件导入数据帧时遇到困难,python,pandas,dataframe,Python,Pandas,Dataframe,我正在尝试导入一个txt文件(到一个数据框中),看起来像这样 12345 20191113418824004 S20191013 23456 20191030T20.60XA X20191230 数据帧必须看起来像 memberid Date1 Code Flag Date2 12345 20191113 418824004 S 20191013 2

我正在尝试导入一个txt文件(到一个数据框中),看起来像这样

12345           20191113418824004           S20191013
23456           20191030T20.60XA            X20191230
数据帧必须看起来像

memberid    Date1      Code        Flag   Date2
12345       20191113   418824004   S      20191013
23456       20191030   T20.60XA    X      20191230
到目前为止,我试着

data = pd.read_csv ("diag.txt",delimiter = "\t")
df = pd.DataFrame(data, columns= ['memberid','Date1','Code','Flag','Date2'])
但是我把所有的专栏都列为NAN。不知道为什么连memberid列都没有拾取。 非常感谢您的指导

这里是分离的规则-

  • 让我们看第一行:
    1234520191113418824004 S20191013
    。第一个连续的数字序列(直到我们到达第一个空格)
    12345
    memberid
  • 在我们遇到的下一个数字块(
    20191113418824004
    )中,第一个
    8
    数字成为
    Date1
    。第一个
    8
    数字后剩下的任何数字都将成为
    code
    (在这种情况下
    20191113
    将成为日期,其余的
    -418824004
    将成为代码)
  • 在下一个数据块中,我们遇到了
    S20191013
    。第一个字母成为
    标志
    ,其余字母成为
    日期2
    。如果我可以说,第三列总是
    varchar(9)
    。因此,在本例中,S是标志,其余的
    20191013
    Date2
  • 这是我手工生成的所有随机模拟数据。没有敏感信息。

    请尝试:

    df=pd.read\u csv(“您的文件.txt”,sep=r“\s+”,header=None)
    df[[“Date1”,“Code”]=df.pop(1).str.extract(r“(\d{8})(.*)”,expand=True)
    df[[“Flag”,“Date2”]=df.pop(2.str.extract(r)([A-Z])(.*)”,expand=True)
    df=df.rename(列={0:“memberid”})
    打印(df)
    
    印刷品:

    memberid日期1代码标志日期2
    0 12345 20191113 418824004 S 20191013
    123456 20191030 T20.60XA X 20191230
    
    如果您有固定宽度的数据,您可能希望使用而不是读取csv,这样您就不必事后解析,而是在读取时直接使用正确的规范,如下所示(宽度是每个列宽的列表,而不是它们的累积和,请小心):

    如果要获得列名,可以将其作为名称参数传递:

    In [34]: pd.read_fwf("test.txt", widths=[16, 8, 20, 1, 30], header=None, names=['memberid','Date1','Code','Flag','Date2'])
    Out[34]:
       memberid     Date1       Code Flag     Date2
    0     12345  20191113  418824004    S  20191013
    1     23456  20191030   T20.60XA    X  20191230
    

    我不知道
    txt
    文件是否存在复制和粘贴问题,但这些值是否像文件中那样粘在一起,或者在
    S20191013
    之间是否存在选项卡?如果这些值真的像那样粘在一起,你能概述一下它们应该如何被分成列的规则吗?您好,这不是复制粘贴问题。我更新了我的问题,提出了如何将它们分开的规则。如果你能看一看,我很乐意。谢谢你的意见。
    In [34]: pd.read_fwf("test.txt", widths=[16, 8, 20, 1, 30], header=None, names=['memberid','Date1','Code','Flag','Date2'])
    Out[34]:
       memberid     Date1       Code Flag     Date2
    0     12345  20191113  418824004    S  20191013
    1     23456  20191030   T20.60XA    X  20191230