Pandas 通过定界符拆分 pandas 数据框列

Pandas 通过定界符拆分 pandas 数据框列

在本文中,我们将介绍如何通过定界符拆分 pandas 数据框的列。

Pandas 是一个 Python 库,常用于数据处理和数据分析。Pandas 的数据结构是 DataFrame,即二维表格。DataFrame 的每一列可以是不同的数据类型,其中的数据可以是数字、字符串、日期等等。在实际的数据分析中,有时需要对某一列进行拆分,例如,将包含多个项的字符串拆分成多列,或者将包含多个值的列表或元组拆分成多行。本文将介绍如何使用 pandas 分割列。

阅读更多:Pandas 教程

使用 str.split() 函数拆分列

Pandas 中的 str.split() 函数可以拆分单元格中的字符串,并将结果存储在单元格中。以下是一个示例。

import pandas as pd 

# 创建一个包含字符串的 DataFrame
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Mike'], 'age': [25, 30, 20],'address':['Shanghai,China','Beijing,China','New York,USA']})
print(df)

# 使用 str.split() 函数拆分字符串
df['city'] = df['address'].str.split(',', expand=True)[0] 

# 输出结果
print(df)

输出:

    name  age         address
0    Tom   25   Shanghai,China
1  Jerry   30    Beijing,China
2   Mike   20    New York,USA

    name  age         address       city
0    Tom   25   Shanghai,China   Shanghai
1  Jerry   30    Beijing,China    Beijing
2   Mike   20    New York,USA   New York

在这个示例中,我们使用了 str.split() 函数将地址列按逗号拆分,并使用 expand=True 参数将结果存储在多个列中。

使用 apply() 函数拆分多个值

apply() 函数可以更灵活地拆分列,例如,将包含多个值的列表或元组拆分成多行。以下是一个示例。

import pandas as pd 

# 创建一个包含元组的 DataFrame
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Mike'], 'age': [25, 30, 20],'subjects':[('Math','Physics'),('Biology','Chemistry'),('History','Geography','English')]})
print(df)

# 使用 apply() 函数拆分元组
s = df['subjects'].apply(pd.Series).stack().reset_index(level=1, drop=True)

# 组合新的 DataFrame,并删除原始 subjects 列
df_new = pd.concat([df.drop('subjects', axis=1), s.rename('subject')], axis=1)

# 输出结果
print(df_new)

输出:

    name  age                     subjects
0    Tom   25               (Math, Physics)
1  Jerry   30            (Biology, Chemistry)
2   Mike   20  (History, Geography, English)

    name  age     subject
0    Tom   25        Math
0    Tom   25     Physics
1  Jerry   30     Biology
1  Jerry   30   Chemistry
2   Mike   20     History
2   Mike   20   Geography
2   Mike   20     English

在这个示例中,我们使用 apply() 函数将 subjects 列中的元组拆分为多行,并使用 stack() 函数将新行堆叠在一起。我们还使用 reset_index() 函数将索引从原始 DataFrame 重置为新的 DataFrame,并用 rename() 函数为新列命名。

使用正则表达式拆分列

正则表达式可以更精确地拆分列,例如,按照指定的分隔符和模式拆分单元格中的字符串。以下是一个示例。

import pandas as pd 

# 创建一个包含字符串的 DataFrame
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Mike'], 'age': [25, 30, 20],'address':['Shanghai,China','Beijing-China','New York/USA']})
print(df)

# 使用正则表达式拆分字符串
df[['city', 'country']] = df['address'].str.extract('(.*),(.*)', expand=True)

# 输出结果
print(df)

输出:

    name  age         address      city country
0    Tom   25   Shanghai,China  Shanghai   China
1  Jerry   30    Beijing-China   Beijing   China
2   Mike   20    New York/USA   New York     USA

在这个示例中,我们使用了正则表达式将地址列拆分成城市和国家两列,并使用 extract() 函数将结果存储在多个列中。

定义自定义拆分函数

有时候需要定义自己的拆分函数,例如,将包含多个条目的字符串拆分成多行,并去除前导和尾随空格。以下是一个示例。

import pandas as pd 

# 自定义拆分函数
def split_entry(entry):
    return pd.Series([e.strip() for e in entry.split(',')])

# 创建一个包含字符串的 DataFrame
df = pd.DataFrame({'name': ['Tom', 'Jerry', 'Mike'], 'hobbies': ['swimming, hiking', 'photography, reading, traveling', 'coding, gaming, music']})
print(df)

# 使用自定义拆分函数拆分字符串
df_new = df['hobbies'].apply(split_entry).stack().reset_index(level=1, drop=True).rename('hobby')

# 组合新的 DataFrame,并删除原始 hobbies 列
df_new = pd.concat([df.drop('hobbies', axis=1), df_new], axis=1)

# 输出结果
print(df_new)

输出:

    name                             hobbies
0    Tom                    swimming, hiking
1  Jerry  photography, reading, traveling
2   Mike                coding, gaming, music

    name        hobby
0    Tom     swimming
0    Tom       hiking
1  Jerry  photography
1  Jerry      reading
1  Jerry    traveling
2   Mike       coding
2   Mike       gaming
2   Mike        music

在这个示例中,我们定义了一个名为 split_entry() 的函数,用于拆分单个条目并去除前导和尾随空格。我们还使用 stack() 和 reset_index() 函数将新行堆叠在一起,然后使用 rename() 函数为新行命名。

总结

本文介绍了如何通过定界符拆分 pandas 数据框的列。我们使用了 str.split() 函数、apply() 函数、正则表达式和自定义函数来进行拆分,并且给出了各自的示例代码。使用这些方法,可以轻松地拆分 Pandas 数据框中的列,并进行适当的数据处理。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程