Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将列的标记值解析为数据帧(缺少某些列值)?_Python_Parsing_Pandas_Dataframe - Fatal编程技术网

Python 如何将列的标记值解析为数据帧(缺少某些列值)?

Python 如何将列的标记值解析为数据帧(缺少某些列值)?,python,parsing,pandas,dataframe,Python,Parsing,Pandas,Dataframe,以下是我的未标记数据集中的两行,一个小子集: random1 147 sub1 95 34 dewdfa3 15000 -1238 SBAASBAQSBARSBATSBAUSBAXBELAAX AAA:COL:UVTWUVWDUWDUWDWW BBB:COL:F CCC:COL:GTATGTCA DDD:COL:K20 EEE:COL:54T GGG:COL:-30.5 HHH:COL:000.1 III:COL:2 JJJ:COL:0 r

以下是我的未标记数据集中的两行,一个小子集:

random1 147 sub1    95  34  dewdfa3 15000   -1238   SBAASBAQSBARSBATSBAUSBAXBELAAX  AAA:COL:UVTWUVWDUWDUWDWW    BBB:COL:F   CCC:COL:GTATGTCA    DDD:COL:K20 EEE:COL:54T GGG:COL:-30.5   HHH:COL:000.1   III:COL:2   JJJ:COL:0   

random2 123 sub1    996 12  kwnc239 10027    144        LBPRLBPSLBRDLBSDLBSLLBWB    AAA:COL:UWTTUTUVVUWWUUU BBB:COL:F   DDD:COL:CACGTCGG    EEE:COL:K19 FFF:COL:HCC16   GGG:COL:873 III:COL:-77 JJJ:COL:0   KKK:COL:0   LLL:COL:1   MMM:COL:212
前九列在整个数据集中是一致的,并且可以标记

我的问题在于以下几列。然后,此行中的每个值首先用列值标记,例如,
AAA:COL:UVTWUVWDUWDUWDWW
是列
AAA
BBB:COL:F
是列
BBB
,等等

但是,(1)每行的列数不同,(2)某些列“缺失”。第一行缺少列
FFF
,第二行跳过列
CCC
HHH

另外,请注意,第一行在列
JJJ
处停止,而第二列在列
MMM
处停止

如何分配数据帧的9+13列,并解析这些值,以便在
column:value
对不存在的情况下,该列将具有
NaN

像pandas.read_table()这样的东西是否具有此功能

这是第一行的“正确”格式:

random    int     sub    int2    int3    string1    int4    int5    string2                         AAA            BBB    CCC    DDD    EEE    FFF    GGG .... MMM
random1   147    sub1    95      34      dewdfa3    15000   -1238   SBAASBAQSBARSBATSBAUSBAXBELAAX  UVTWUVWDUWDUWDWW    F   DFADFADFA   K20 54T 'NaN' -30.5 ....'NaN'
相关(未回答)问题如下:

这样就可以了:

text = """random1 147 sub1    95  34  dewdfa3 15000   -1238   SBAASBAQSBARSBATSBAUSBAXBELAAX  AAA:COL:UVTWUVWDUWDUWDWW    BBB:COL:F   CCC:COL:GTATGTCA    DDD:COL:K20 EEE:COL:54T GGG:COL:-30.5    HHH:COL:000.1   III:COL:2  JJJ:COL:0   
random2 123 sub1    996 12  kwnc239 10027    144        LBPRLBPSLBRDLBSDLBSLLBWB    AAA:COL:UWTTUTUVVUWWUUU BBB:COL:F   DDD:COL:CACGTCGG    EEE:COL:K19 FFF:COL:HCC16   GGG:COL:873 III:COL:-77 JJJ:COL:0   KKK:COL:0   LLL:COL:1   MMM:COL:212"""

data = [line.split() for line in text.split('\n')]
data1 = [line[:9] for line in data]
data2 = [line[9:] for line in data]

# list of dictionaries from data2, where I parse the columns
dict2 = [[dict([d.split(':COL:') for d in d1]) for d1 in data2]

result = pd.concat([pd.DataFrame(data1),
                    pd.DataFrame(dict2)],
                   axis=1)

result.iloc[:, 9:]

我看到一个
'III:a:2'
。请解释这是什么。@piRSquared列I(即大写字母“I”)位于H列之后和J列之前。我的意思是,
'III:A:2'
不一致。除了
'III:a:2'
'HHH:B:000.1'
之外,其他每个条目中都有一个
':列:'
。你没有在帖子中解释这些应该如何解释。@piRSquared我怀疑这是数据的残余。应解释为“III”列和“HHH”列。我将对上面的内容进行编辑,以减少这个问题(已经)的复杂性。然后,我下面的答案将回答您上面的问题,我只包括两行。实际上,有数千行。您可以编辑上面的内容以在行之间进行解析吗?我用这种方式显示了所有数据。我调换了位置。显然,这不是个好主意<代码>结果是您的答案<代码>结果。iloc[:,9:://code>只是显示具有挑战性的列,以便我可以打印它们。抱歉,我误解了第二行代码。谢谢,我不知道为什么我以前很困惑。