如何在Pandas DataFrame每行的单个单元格中存储命名元组
嘿,我来帮你搞定这个问题!你遇到的情况其实挺常见的,主要分两种场景来解决,看你是想把命名元组拆成多列,还是把整个元组作为单个单元格的值:
方式一:把命名元组的字段拆成DataFrame的多列(最常用)
这种方式适合你希望元组的每个参数对应DataFrame一列的场景,直接用Pandas的内置方法就能轻松实现:
from collections import namedtuple import pandas as pd # 定义命名元组类型 TestTuple = namedtuple("TestTuple", ['param1', 'param2']) # 创建几个命名元组实例 tuple_1 = TestTuple(param1='x', param2='y') tuple_2 = TestTuple(param1='a', param2='b') # 直接将命名元组列表转为DataFrame df = pd.DataFrame([tuple_1, tuple_2]) print(df)
输出结果:
param1 param2 0 x y 1 a b
如果要给已有的DataFrame追加单行,推荐用pd.concat(避免旧版append的警告):
new_tuple = TestTuple(param1='m', param2='n') df = pd.concat([df, pd.DataFrame([new_tuple])], ignore_index=True)
方式二:把整个命名元组存入单个单元格
如果你就是想把完整的命名元组作为一个对象存在单元格里,只需要确保Pandas把它识别为单个对象(而不是自动拆分),可以用列表包裹或者指定列类型为object:
from collections import namedtuple import pandas as pd TestTuple = namedtuple("TestTuple", ['param1', 'param2']) tuple_1 = TestTuple(param1='x', param2='y') tuple_2 = TestTuple(param1='a', param2='b') # 初始化指定列类型为object的DataFrame df = pd.DataFrame(columns=['named_tuple'], dtype=object) # 存入完整元组(注意用[]包裹,避免被拆分) df.loc[0] = [tuple_1] df.loc[1] = [tuple_2] # 之后可以直接访问元组的字段 print(df['named_tuple'][0].param1) # 输出 'x'
这样两种方式都能满足你的需求,根据实际场景选就行~
内容的提问来源于stack exchange,提问作者Nickpick
相关产品推荐
相关产品推荐

