将列表添加到 DF/将字符串扩展到新列和数据

Add lists to DF / Expand string to new column and data

我有一个 CSV 文件,其中有一列包含带有车辆选项的字符串。

Brand     Options
Toyota    Color:Black,Wheels:18
Toyota    Color:Black, 
Chevy     Color:Red,Wheels:16,Style:18
Honda     Color:Green,Personalization:"Customer requested detailing"
Chevy     Color:Black,Wheels:16

我想将“选项”字符串扩展到具有适当名称的新列。数据集相当大,所以我试图以编程方式命名列(即:颜色、轮子、个性化),然后将相应的值应用于行或空值。

添加新数据

import pandas as pd
Cars = pd.read_csv("Cars.CSV")                          # Loads cars into df 
split = Cars["Options"].str.split(",", expand = True)   # Data in form of {"Color:Black", "Wheels:16"}

split[0][0].split(":") # returns ['Color', 'Black']

在没有指定列的情况下将这些列表连接到原始数据框 Cars 的优雅方法是什么?

您可以准备一个干净的 split,方法是首先使用 rstrip 以避免出现空列,因为您有一行末尾有逗号。然后,拆分后,分解为多行并再次拆分 :,这次使用 expand=True。然后,pivot 将数据集转换为所需格式并 concat 返回原始数据帧:

pd.concat([df,
           df['Options'].str.rstrip(',')
                        .str.split(',')
                        .explode()
                        .str.split(':', expand=True)
                        .pivot(values=1, columns=0)],
          axis=1).drop('Options', axis=1)
Out[1]: 
    Brand  Color                 Personalization Style Wheels
0  Toyota  Black                             NaN   NaN     18
1  Toyota  Black                             NaN   NaN    NaN
2   Chevy    Red                             NaN    18     16
3   Honda  Green  "Customer requested detailing"   NaN    NaN
4   Chevy  Black                             NaN   NaN     16