Python 从字典到数据帧的列表列表
我正在尝试拟合这些数据:Python 从字典到数据帧的列表列表,python,python-3.x,pandas,list,dictionary,Python,Python 3.x,Pandas,List,Dictionary,我正在尝试拟合这些数据: [['Manufacturer: Hyundai', 'Model: Tucson', 'Mileage: 258000 km', 'Registered: 07/2019'], ['Manufacturer: Mazda', 'Model: 6', 'Year: 2014', 'Registered: 07/2019']] 到数据帧 并非所有标签都出现在每条记录中,例如,有些记录有“里程”,而有些记录没有,反之亦然。 我总共有26个功能,很
[['Manufacturer: Hyundai',
'Model: Tucson',
'Mileage: 258000 km',
'Registered: 07/2019'],
['Manufacturer: Mazda',
'Model: 6',
'Year: 2014',
'Registered: 07/2019']]
到数据帧
并非所有标签都出现在每条记录中,例如,有些记录有“里程”,而有些记录没有,反之亦然。
我总共有26个功能,很少有项目具有所有功能
我想构建一个数据框架,它将在列中保存功能,如果功能不存在,那么内容应该是“NaN”
我有
colnames=['Manufacturer', 'Model', 'Mileage', 'Registered', 'Year'...(all 26 features here)]
df = pd.read_csv("./data/output.csv", sep=",", names=colnames, header=None)
很少有先决条件列会给出预期的输出,但当涉及到可选功能时,缺少数据会导致之后的功能出现在错误的列下。
仅当所有要素都存在时,记录才会正确映射
我忘了提到一些缺少值的功能也没有“:”但在列表中存在。
因此,在这两种情况下:
- “里程数”(缺少值,但也缺少“:”)
- 记录备忘中缺少“里程数”
这两种情况下的赋值都应为“NaN”。使用嵌套列表理解词典列表,如果添加了相同的键,则传递给
DataFrame
构造函数NaN
:
L = [['Manufacturer: Hyundai',
'Model: Tucson',
'Mileage: 258000 km',
'Registered: 07/2019'],
['Manufacturer: Mazda',
'Model: 6',
'Year: 2014',
'Registered: 07/2019']]
df = pd.DataFrame([dict(y.split(':') for y in x) for x in L])
print (df)
Manufacturer Mileage Model Registered Year
0 Hyundai 258000 km Tucson 07/2019 NaN
1 Mazda NaN 6 07/2019 2014
编辑:您可以使用.split(maxslit=1)
按第一个空格分割:
L = [['Manufacturer Hyundai',
'Model Tucson',
'Mileage 258000 km',
'Registered 07/2019'],
['Manufacturer Mazda',
'Model 6',
'Year 2014',
'Registered 07/2019']]
df = pd.DataFrame([dict(y.split(maxsplit=1) for y in x) for x in L])
print (df)
Manufacturer Mileage Model Registered Year
0 Hyundai 258000 km Tucson 07/2019 NaN
1 Mazda NaN 6 07/2019 2014
编辑:
L=[['制造商现代',
“图森模型”,
“里程258000公里”,
“注册日期:2019年7月”],
[“制造商马自达”,
“型号6”,
“2014年”,
“注册日期:2019年7月”,
“附加设备aaa”]]
words2=[“附加设备”]
L1=[]
对于L中的x:
di={}
对于x中的y:
对于words中的单词2:
如果set(word.split(maxslit=2)[:2])
上面写着:ValueError:dictionary update sequence元素#18的长度为1;2是必需的。这是第一条记录中的第一个空元素。我的错误。实际上,这些元素不仅缺少,而且在功能名称后没有“:”。您的第一个版本在缺少功能的记录上工作得非常好。我已经非常感谢了!不幸的是,更新后的版本不适用于功能有两个单词(“附加设备”)的记录,例如。Awesom!很好用!非常感谢你!
L = [['Manufacturer Hyundai',
'Model Tucson',
'Mileage 258000 km',
'Registered 07/2019'],
['Manufacturer Mazda',
'Model 6',
'Year 2014',
'Registered 07/2019',
'Additional equipment aaa']]
words2 = ['Additional equipment']
L1 = []
for x in L:
di = {}
for y in x:
for word in words2:
if set(word.split(maxsplit=2)[:2]) < set(y.split()):
i, j, k = y.split(maxsplit=2)
di['_'.join([i, j])] = k
else:
i, j = y.split(maxsplit=1)
di[i] = j
L1.append(di)
df = pd.DataFrame(L1)
print (df)
Additional_equipment Manufacturer Mileage Model Registered Year
0 NaN Hyundai 258000 km Tucson 07/2019 NaN
1 aaa Mazda NaN 6 07/2019 2014