Lista de Python a trama de datos con condiciones

Si_CPyR:

Tengo una lista larga (muestra a continuación)

df_list = ['Joe',
 'UK',
 'Buyout',
 '10083',
 '4323',
 'http://info2.com',
 'Linda',
 'US',
 'Liquidate',
 '97656',
 '1223',
 'http://global.com',
 '[email protected]'           
          ]

Como se puede ver, la lista contiene información sobre una persona (Joe y Linda). Sin embargo, el problema es que para algunas observaciones (Joe en este ejemplo), me falta séptimo elemento, que corresponde a la dirección de correo electrónico de la entidad, ya que para Linda, tenemos correo electrónico de esta persona, por lo tanto poblada.

Quiero convertir esta lista en una trama de datos con 7 columnas (abajo), y para las observaciones que no tienen una dirección de correo válida (no contiene "@"), quiero poner valores nulos / vacíos, más que el siguiente elemento , que sería la columna NOMBRE de la siguiente observación para la columna de correo electrónico.

cols = ['NAME'
,'COUNTRY'
,'STRATEGIES'
,'TOTAL FUNDS'
,'ESTIMATED PAYOFF'
,'WEBSITE'
,'EMAIL']

Hasta el momento, esto es donde estoy

big_list = []  #intention is to append N (number of unique entity) small_lists into a big_list and call pd.DataFrame(big_list)
small_list = [] #intention is to create a small_list for each observation/entity, containing 7 values, including email or null if empty
for element in df_list:
    small_list.append(element)
if ("@" not in small_list):
    small_list[-1] = None

¡Cualquier ayuda sería muy apreciada! Gracias

kederrac:

usted podría utilizar un generador:

def gen_batch(df_list):
    i = 6
    while i <= len(df_list):
        if i < len(df_list) and '@' in df_list[i]:
            yield df_list[i-6: i+1] 
            i += 7
        else:
            yield df_list[i-6: i] + [pd.np.NAN]
            i += 6

pd.DataFrame(gen_batch(df_list), columns=cols)  

salida: introducir descripción de la imagen aquí

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=320769&siteId=1
Recomendado
Clasificación