Предполагая, что значения DataFrame в столбце C
представляют собой строку, разделенную запятыми, код выполняет следующие действия:
- Создает словарь из строки, разделенной запятыми
- Удаляет все значения NULL оцененные строки / пустые строки, присутствующие в столбце
C
, так что ранее созданный объект словаря может быть расширен - Динамически создает новые столбцы на основе ключей словаря
- Расширяет словарь
- Объединяет фрейм данных с нулевым значением и вновь созданный фрейм данных
import pandas as pd
import numpy as np
df=pd.DataFrame({"A":['a','b','c',],"B":['e','f','d'],"C":['D=nv,E=nv',np.nan,"D=nv"],})
#Converts string to dictionary of key-value pairs
df.loc[:,"C"]=df.loc[:,"C"].apply(lambda x: dict(map(lambda z: z.split('='),x.split(","))) if type(x)==str else np.nan)
#Drop all null values present in Column so that the dataframe can be expanded
#Separate the null and actual rows containing values into 2 separate dataframes
df_act=df.dropna(subset=["C"])
df_null=df[~df.index.isin(df_act.index)]
#Expand the Column and store in a temporary DataFrame
df_temp=df_act['C'].apply(pd.Series)
for cols in df_temp.columns:
df_act.loc[:,cols]=np.nan
df_null.loc[:,cols]=np.nan
#Save Contents in the actual DataFrame
df_act[df_temp.columns]=df_temp
#Drop C Column to match with Sample Output
df_act.drop("C", axis=1, inplace=True)
df_null.drop("C", axis=1, inplace=True)
#Concatenate the DataFrames
final_df=pd.concat([df_act, df_null])
Обратите внимание, что удаление столбца C
выполняется только для того, чтобы выходные данные совпадали с предоставленным образцом выходных данных.