如何将元组列表转换为指定格式的Pandas DataFrame
问题与解决方案
问题描述
有一个通过循环动态生成的单条元组列表,示例如下:
builddict = [ ('MfgPartNumber', 'ITEM NUMBER'), ('ShortDescription', 'ITEM DESCRIPTION'), ('StdPk', 'PACKAGE QTY'), ('ListPrice', 'LIST PRICE'), ('Cost', 'NET PRICE APRIL 2024') ]
需要将该列表转换为Pandas DataFrame,要求以元组的第一个元素作为列名,第二个元素作为对应行的值,目标格式如下:
| MfgPartNumber | ShortDescription | StdPk | ListPrice | Cost | | ------------ | ------------------- |----- | ---------- | ---- | | ITEM NUMBER | ITEM DESCRIPTION |PACKAGE QTY| LIST PRICE | NET PRICE APRIL 2024 |
已尝试以下代码,但不知道如何设置列名:
DictCols = list(zip(*builddict))[0] DictData = pd.DataFrame(list(zip(*builddict))[1]).T print(DictData)
解决方法
方法1:字典直接转换(最直观)
元组列表本质是列名与对应值的键值对,直接转为字典后传入DataFrame即可:
import pandas as pd builddict = [ ('MfgPartNumber', 'ITEM NUMBER'), ('ShortDescription', 'ITEM DESCRIPTION'), ('StdPk', 'PACKAGE QTY'), ('ListPrice', 'LIST PRICE'), ('Cost', 'NET PRICE APRIL 2024') ] # 将元组列表转为字典,再构造单条数据的DataFrame df = pd.DataFrame([dict(builddict)]) print(df)
运行后直接生成符合要求的DataFrame,列名和行值自动匹配。
方法2:基于现有代码修改
你已经提取了列名和数据,只需给DataFrame添加columns参数指定列名:
import pandas as pd builddict = [ ('MfgPartNumber', 'ITEM NUMBER'), ('ShortDescription', 'ITEM DESCRIPTION'), ('StdPk', 'PACKAGE QTY'), ('ListPrice', 'LIST PRICE'), ('Cost', 'NET PRICE APRIL 2024') ] DictCols = list(zip(*builddict))[0] DictData = pd.DataFrame(list(zip(*builddict))[1]).T # 为DataFrame设置列名 DictData.columns = DictCols print(DictData)
方法3:字典推导式构造
用字典推导式直接生成单条数据的结构,再传入DataFrame:
import pandas as pd builddict = [ ('MfgPartNumber', 'ITEM NUMBER'), ('ShortDescription', 'ITEM DESCRIPTION'), ('StdPk', 'PACKAGE QTY'), ('ListPrice', 'LIST PRICE'), ('Cost', 'NET PRICE APRIL 2024') ] df = pd.DataFrame([{col: val for col, val in builddict}]) print(df)
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

