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。行具有所有不需要的空值。:-)