Как выровнять столбец списков, когда некоторые содержат нулевые значения?

#python #pandas #flatten

#python #панды #сгладить

Вопрос:

Вероятно, это очень очевидный вопрос, но у меня есть столбец, содержащий списки, которые я пытаюсь сгладить: т.е. [AB, CD] -> AB, CD

Пример фрейма данных:

 data = [
    ["ABC", ["AB", "AB", "EF"]],
    ["DEF", ["CD", "EF"]],
    ["GHI", ["JK"]],
    [
        "JKL",
        np.nan,
    ],
]

df = pd.DataFrame(data, columns=["ID", "list"])
df
 

Я применяю эту функцию к указанному столбцу:

 def func(string):
    flattened_string = ", ".join(map(str, string))
    return flattened_string
 
 df = df["list_column"].apply(func)
 

Однако есть несколько строк, содержащих NaN значения, которые инициируют ошибку "TypeError: 'float' object is not iterable" . Могу ли я каким-либо образом изменить эту функцию, чтобы исправить это? Или, возможно (вероятно), гораздо лучший способ сделать это?

Спасибо!!!

Ответ №1:

Вам нужно заполнить NaN s в этом столбце чем-то пустым, но повторяющимся, например "" , или [] . Вы также можете упростить свою функцию до простого .apply(", ".join) , предполагая, что столбец списков, к которым вы присоединяетесь, представляет собой только строки.

 df["list"] = df["list"].fillna("").apply(", ".join)
 

Комментарии:

1. Одно слово. умный 1

2. вау, я действительно усложнил это. Спасибо!!!

3. Наконец-то под вашим радаром появился ответ Pandas Corralien: D

Ответ №2:

Если необходимо сохранить NaN значения в столбце, мы можем использовать параметр с расширением, только объединив notna значения в столбце и присвоив обратно:

 df['list'] = df.loc[df['list'].notnull(), 'list'].map(','.join)
 

Или если в списках есть нестроки:

 df['list'] = df.loc[
    df['list'].notnull(), 'list'
].map(lambda x: ','.join(map(str, x)))
 

df :

     ID      list
0  ABC  AB,AB,EF
1  DEF     CD,EF
2  GHI        JK
3  JKL       NaN  # Still NaN not empty string