如何在 Pandas 中自动将字符串转换为列表或集合?

3
假设我们在Pandas中有这个数据集。在我的情况下,我通过使用aggfunc为lambda x: x的pivot_table()来获得它,因为list或set对这种类型的数据无法处理。
import pandas as pd

df = pd.DataFrame(
    data=[
        [None, "1,2,3", None],
        ["3,4,5", None, "1,4,5"],
        [None, "1,3,6", None],
    ],
    index=["YYZ", "YEG", "BRU"],
    columns=["ANA", "JAL", "KLM"],
)
df

我希望解析它以将逗号分隔的字符串更改为集合。我使用了一种简单的方法来实现:

for column in df.columns:
    nulls = df[column].isnull()
    for idx in df.loc[nulls, column].index:
        df.at[idx, column] = set()
    for idx in df.loc[~nulls, column].index:
        df.at[idx, column] = set(df.at[idx, column].split(","))
df

这将产生以下结果:
        ANA       JAL       KLM
YYZ     {}        {3, 2, 1} {}
YEG     {5, 4, 3} {}        {5, 4, 1}
BRU     {}        {6, 3, 1} {}

在Pandas中,做这件事的正确方式是什么?


你应该将标量存储在数据框中,而不是序列。 - Paul H
1个回答

2
让我们尝试使用lambda和applymap。lambda检查是否不是None,然后拆分并转换为set,否则返回一个空set。
编辑:添加map()以将集合项的数据类型从字符串更改为整数。
df.applymap(lambda x: set(map(int, x.split(','))) if x is not None else {})

           ANA        JAL        KLM
YYZ         {}  {2, 1, 3}         {}
YEG  {5, 4, 3}         {}  {1, 4, 5}
BRU         {}  {6, 1, 3}         {}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接