Python 正在努力将结构化字符串、无标题、无分隔符的文件解析到数据帧中

Python 正在努力将结构化字符串、无标题、无分隔符的文件解析到数据帧中,python,pandas,Python,Pandas,我想得到一些帮助。我有一些来自交通部网站的大文本文件。我试图将大量交通数据可视化。我面临的挑战如下: 文件是结构化字符串(200个字符长),没有分隔符或标题 解析文件的唯一方法是计算列数,然后映射到单独的数据字典 这些文件很大,一个州大约30000行,一个月 一个例子如下: S56RP037051181U1N13N00 “S”表示它是一个记录 “56”表示州编号 “RP0370”表示传感器的唯一ID “5”表示方向(在本例中为正南方向) 诸如此类 我尝试将这些文件解析为数据帧: temp=pd.

我想得到一些帮助。我有一些来自交通部网站的大文本文件。我试图将大量交通数据可视化。我面临的挑战如下:

  • 文件是结构化字符串(200个字符长),没有分隔符或标题
  • 解析文件的唯一方法是计算列数,然后映射到单独的数据字典
  • 这些文件很大,一个州大约30000行,一个月
  • 一个例子如下:

    S56RP037051181U1N13N00

  • “S”表示它是一个记录
  • “56”表示州编号
  • “RP0370”表示传感器的唯一ID
  • “5”表示方向(在本例中为正南方向) 诸如此类
  • 我尝试将这些文件解析为数据帧:

    temp=pd.read\u csv('path',header=None,sep=None)
    
    但是,解析器一直在尝试拆分列。我想做的是一个字符分析,行中的每个字符都有自己的列,包括空格,然后根据示例中的列数将每一行分开

    我已尝试使用以下方法创建行列表:

    fileObj=open(,'r')
    templast=fileObj.readlines()
    
    然后计算列数,但这在计算上似乎效率很低


    您能推荐一种更优雅的方法吗?

    下面的代码是否生成一个单列数据帧,其中每个条目都是一个200字符的字符串

    temp=pd.read\u csv('path',header=None,sep=None)

    如果是这样的话,您可以运行一个程序,根据需要生成尽可能多的新列。假设temp中的唯一列名为“record”,其中每个条目都是您引用的200个字符串


    上述函数中的每个代码块都在数据帧中创建一个新的空列,然后用200个字符的字符串片段填充它(即[1:3]将第2个和第3个字符切片)。

    下面的代码是否生成一个单列数据帧,其中每个条目都是200个字符的字符串

    temp=pd.read\u csv('path',header=None,sep=None)

    如果是这样的话,您可以运行一个程序,根据需要生成尽可能多的新列。假设temp中的唯一列名为“record”,其中每个条目都是您引用的200个字符串


    上述函数中的每个代码块都在数据帧中创建一个新的空列,然后用200个字符串的一部分(即[1:3]将第2个和第3个字符分割)填充该列。

    嘿,Charles,你能在这里发布一些数据,或者用csv发布DoP网站的链接吗?嘿,Charles,你能在这里发布一些数据,也许还有到DoP网站的csv链接吗?这真是太聪明了。我试试看。非常感谢。我确实有一个问题,即数据帧解析器在遇到某些字符时会不断尝试添加新列,即“(倒逗号)。我会想办法抑制它,然后试试这个。这真的很聪明。我会试试。谢谢。我确实有一个问题,数据帧解析器在遇到某些字符时会不断尝试添加新列,例如“(倒逗号)。我会想办法抑制它,然后试试这个。
    def string_splitter(df):
         # New Column 1
         df['state'] = none
         def state_str(row):
             return row['record'][1:3]
         df.state = df.apply(state_str, axis = 1)
    
         # New Column 2
         df['unique_id'] = none
         def id_str(row):
             return row['record'][3:12]
         df.state = df.apply(id_str, axis = 1)
    
         # New Column N
         df['column_name'] = none
         def colname_str(row):
             return row['record][startchar:endchar]
         df.column_name = df.apply(colname_str, axis = 1)
    
         return df