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 数据框中的列,并进行适当的数据处理。