Python 是一种面向对象、动态类型的解释型高级程序设计语言,广泛应用于人工智能、Web 开发、科学计算等领域。Python 的数据处理能力在数据分析和科学计算等任务中表现突出,其中列变行是常见需求之一。
一、Python列变行用途
在实际工作和生活中,我们经常会遇到将一列数据转换为多行数据的需求。比如爬取网页上的表格数据,将表格中的数据转换为按行展示的数据,或者将一列邮件地址转换为单独的一行邮件地址列表。Python 列变行就是解决这种需求的一种常用操作技巧。
二、手动实现Python列变行操作
实现Python列变行主要需要了解Python中的基本数据结构和常用操作。下面以爬取美股前十大基金列表为例,手动实现Python列变行操作。
import requests # 导入 requests 库 from bs4 import BeautifulSoup # 导入 BeautifulSoup 库 url = 'https://finance.yahoo.com/mutualfunds?count=25&offset=0&sort=largest' # 目标网页的网址 r = requests.get(url) # 请求网页 soup = BeautifulSoup(r.text, 'html.parser') # 解析网页 # 定位表格中的基金名和代码 table = soup.find_all('table')[0] # 定位表格 trs = table.tbody.find_all('tr') # 定位表格中的行 for tr in trs: # 遍历行 ticker = tr.find_all('td')[0].text # 获取基金代码 name = tr.find_all('td')[1].text # 获取基金名称 print(ticker + ': ' + name) # 打印基金代码和名称
在上述代码中,我们使用了 requests 库请求网页,并使用 BeautifulSoup 库解析网页。定位到目标表格后,遍历表格中的行,获取每行中的数据,将基金代码和名称打印出来。这样,我们就手动实现了Python列变行操作。
三、Pandas库实现Python列变行操作
手动实现 Python 列变行操作虽然不难,但随着数据量的增加,代码的复杂度和开发难度也将随之增加。而Pandas库提供的 pivot() 和 melt() 函数可以方便快捷地实现 Python 列变行操作,大大提高了开发效率。
1. 使用Pandas库的pivot()函数实现列变行
import pandas as pd fund_list = {'code': ['VFIAX', 'VTIAX', 'FXAIX'], 'name': ['Vanguard 500 Index Fund Admiral Shares', 'Vanguard Total International Stock Index Fund Admiral Shares', 'Fidelity 500 Index Fund']} df = pd.DataFrame(fund_list) # 将数据转换为DataFrame格式 df_pivot = df.pivot(columns='name', values='code') # 使用Pandas的pivot()函数实现列变行 print(df_pivot) # 打印转换后的结果
在上述代码中,我们将数据转换为 Pandas 的 DataFrame 格式,然后使用 pivot() 函数将基金名称作为列标签,基金代码作为值,实现了列变行操作。
2. 使用Pandas库的melt()函数实现行变列
import pandas as pd df = pd.DataFrame({'A': ['a', 'b', 'c'], 'B': [1, 3, 5], 'C': [2, 4, 6]}) # 将数据转换为DataFrame格式 df_melt = pd.melt(df, id_vars='A', value_vars=['B', 'C']) # 使用Pandas的melt()函数实现行变列 print(df_melt) # 打印转换后的结果
在上述代码中,我们使用 Pandas 的 melt() 函数将数据从多个列中依次转换为一列,并使用 id_vars 和 value_vars 参数指定需要保留的列和需要转换的列。
总结
Python 列变行是一种常见的数据处理操作,可以方便地将一列数据转换为多行数据。手动实现 Python 列变行虽然不难,但代码复杂度较高,不利于开发和维护。而Pandas库提供了 pivot() 和 melt() 函数,可以方便快捷地实现列变行和行变列操作,大大提高了开发效率。