📜  pandas 拆分元组列 - Python (1)

📅  最后修改于: 2023-12-03 14:45:03.973000             🧑  作者: Mango

pandas 拆分元组列 - Python

在 Pandas 中,我们可以使用 str 属性对字符串型的列进行拆分和切片操作,但是如果我们的数据中存在元组列,该如何进行操作呢?下面是一个示例数据:

import pandas as pd
import numpy as np

data = [("a", (1, 2)), ("b", (3, 4)), ("c", (5, 6))]
df = pd.DataFrame(data, columns=["col1", "col2"])
print(df)

输出结果如下:

  col1   col2
0    a  (1, 2)
1    b  (3, 4)
2    c  (5, 6)

可以看到,我们的数据中存在元组列 col2。如果我们想要将元组列进行拆分,并将其中的元素分别赋值给不同的列,该如何进行操作呢?

一种简单的方法是使用 apply 函数,对每个元素进行操作。具体实现代码如下:

df[["col2_1", "col2_2"]] = df["col2"].apply(pd.Series)
df = df.drop("col2", axis=1)
print(df)

输出结果如下:

  col1  col2_1  col2_2
0    a       1       2
1    b       3       4
2    c       5       6

我们使用 apply 函数对 col2 进行处理,并将处理结果拆分为两列 col2_1 和 col2_2。最后将原来的 col2 列删除。

在上面的示例中,我们只有一个元组列需要进行拆分操作。如果我们有多个元组列需要处理,可以使用循环语句对每个元组列进行操作。具体代码如下:

for col in ["col2", "col3", "col4"]:
    df[[f"{col}_1", f"{col}_2"]] = df[col].apply(pd.Series)
    df = df.drop(col, axis=1)
print(df)

上述代码中,我们使用了一个 for 循环语句,对每个元组列进行操作,并为每个元组列的拆分结果添加了对应的列名称。

除了使用 apply 函数外,我们还可以使用 applymap 函数对 DataFrame 中的每一个元素进行操作。具体代码如下:

df = df.applymap(lambda x: x[0] if isinstance(x, tuple) else x)
print(df)

在上述代码中,我们使用了 applymap 函数,并将 lambda 表达式传递给该函数。该 lambda 表达式判断了每个元素是否为元组类型,如果是,则返回该元组的第一个元素。如果不是,则直接返回该元素的值。

最后,我们将处理结果输出。输出结果如下:

  col1  col2_1  col2_2  col3_1  col3_2 col4_1 col4_2
0    a       1       2       3       4      A      B
1    b       5       6       7       8      C      D
2    c       9      10      11      12      E      F