列表到字典到数据帧的列表

2024-09-29 23:26:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试拟合以下数据:

[['Manufacturer: Hyundai',
  'Model: Tucson',
  'Mileage: 258000 km',
  'Registered: 07/2019'],
 ['Manufacturer: Mazda',
  'Model: 6',
  'Year: 2014',
  'Registered: 07/2019']]

到数据帧。你知道吗

并不是所有的标签都出现在每个记录中,例如,有些记录有“里程数”,有些则没有,反之亦然。 我一共有26个特性,只有很少的项目具有全部特性。你知道吗

我想建立熊猫数据框架,将持有列的特点,如果功能不存在,比内容应该是'南'。你知道吗

我有

colnames=['Manufacturer', 'Model', 'Mileage', 'Registered', 'Year'...(all 26 features here)] 
df = pd.read_csv("./data/output.csv", sep=",", names=colnames, header=None)

很少有第一个先决条件列会给出预期的输出,但当涉及到可选特性时,会导致缺少数据,从而导致之后的特性出现在错误的列下。 只有当所有特征都存在时,记录才会正确映射。你知道吗

我忘了提到一些缺少值的特性也没有“:”但在列表中存在。 所以在这两种情况下:

  • '里程',(缺少值,但也缺少':')
  • 从记录altogheter中丢失“里程”

两种情况的赋值都应为“NaN”。你知道吗


Tags: csv数据model记录情况特性yearkm
1条回答
网友
1楼 · 发布于 2024-09-29 23:26:43

对字典列表使用嵌套列表理解并传递给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(maxsplit=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 = [['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

相关问题 更多 >

    热门问题