Python 从某些键缺少值的字典列表创建Dataframe

Python 从某些键缺少值的字典列表创建Dataframe,python,list,pandas,dictionary,dataframe,Python,List,Pandas,Dictionary,Dataframe,各位 下面是我用来解析文本文件的代码: import pandas as pd tags = ['129','30','32','851','9730','9882'] rows = [] file = open('D:\\python\\redi_fix\\redi_august.txt','r') content = file.readlines() for line in content: for message in line.split('\t'):

各位

下面是我用来解析文本文件的代码:

import pandas as pd

tags = ['129','30','32','851','9730','9882'] 
rows = []

file = open('D:\\python\\redi_fix\\redi_august.txt','r') 
content = file.readlines() 
for line in content:
    for message in line.split('\t'):
        try:
            row_dict = {}
            tag,val = message.split('=')        
            if tag in tags:
                row_dict[tag]=val
                rows.append(row_dict)
        except:
            pass
从行创建数据帧会产生以下结果:

129     30      32      851     9730    9882
r170557 NaN     NaN     NaN     NaN     NaN
NaN     ARCA    NaN     NaN     NaN     NaN
NaN     NaN     100     NaN     NaN     NaN
r170557 NaN     NaN     NaN     NaN     NaN
NaN     ARCA    NaN     NaN     NaN     NaN
NaN     NaN     300     NaN     NaN     NaN
看起来键的每个值都位于不同的行上。 我努力实现的结果是所有值都在同一行上-例如,请参见以下内容:

129     30      32      851     9730    9882
r170557 ARCA    100     NaN     NaN     NaN
r170557 ARCA    300     NaN     NaN     NaN
如果您想“折叠”您的
NaN
s,您可以在
第一个
/
最后一个
上执行
groupby
+
agg

df.groupby(df['129'].notnull().cumsum(), as_index=False).agg('first')

       129    30     32  851  9730  9882
0  r170557  ARCA  100.0  NaN   NaN   NaN
1  r170557  ARCA  300.0  NaN   NaN   NaN

使用您的结果数据帧,我们需要
排序
dropna

result.apply(lambda x : sorted(x,key=pd.isnull)).dropna(thresh=1)
Out[1171]: 
       129    30     32  851  9730  9882
0  r170557  ARCA  100.0  NaN   NaN   NaN
1  r170557  ARCA  300.0  NaN   NaN   NaN

按“129”、“30”、“32”分组如果你的问题得到了回答,别忘了回答。Thanks@Wen美好的同时,我想这是我从皮尔或耶斯雷尔那里学到的。真的很好+1@MaxU谢谢,这对你来说意义重大。:-)这个解决方案也有效,尽管我不完全理解。我们将进一步调查。非常感谢你的帮助。排序通常是我的事情:)上述解决了我的问题,完全符合预期。不得不承认,我并不完全理解它的工作原理和原因,我需要一些时间来了解它。谢谢大家的支持。@Selim Yw~:-),如果您有任何问题,请告诉我know@Wen,你能解释一下你建议的代码的逻辑是什么,你的陈述到底是什么;谢谢您的时间。@Selim apply是一个逐列遍历的函数,您可以将它视为for循环的一个增强,按键排序,按赋值级别排序,在这里,他们将首先按非空值排序,然后按空值dropna排序。在这里,dropn是drop。行具有所有不需要的空值。:-)