Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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_Python 3.x_Pandas_List_Dictionary - Fatal编程技术网

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