如何将元组值设置为熊猫数据框?

Posted

技术标签:

【中文标题】如何将元组值设置为熊猫数据框?【英文标题】:How do I set tuple value to pandas dataframe? 【发布时间】:2018-04-09 16:23:24 【问题描述】:

我想做的应该很简单。本质上,我有一些数据框,我需要为某些列分配一些元组值。

例如:

pd_tmp = pd.DataFrame(np.random.rand(3,3))
pd_tmp["new_column"] = ("a",2)

我只需要一个带有元组值的新列,我该怎么办?

ValueError: Length of values does not match length of index

前面的代码出错了。

【问题讨论】:

【参考方案1】:

您可以将元组包装在一个列表中:

import pandas as pd
pd_tmp = pd.DataFrame(np.random.rand(3,3))
pd_tmp["new_column"] = [("a",2)] * len(pd_tmp)

pd_tmp
#          0           1           2    new_column
#0  0.835350    0.338516    0.914184    (a, 2)
#1  0.007327    0.418952    0.741958    (a, 2)
#2  0.758607    0.464525    0.400847    (a, 2)

【讨论】:

【参考方案2】:

series的文档。

Series 是一个可以保存任何数据的一维标签数组 类型(整数、字符串、浮点数、Python 对象、 等等。)。轴标签统称为索引。这 创建系列的基本方法是调用:

>>> s = pd.Series(data, index=index)

在这里,数据可以是很多不同的东西:

Python 字典 一个ndarray 标量值(如 5)

所以Series 不会直接采用元组类型。 @Psidom 的答案是将元组作为ndarray 的元素。

如果您询问如何set a cell of Series/Dataframe,这是一个问问题。

【讨论】:

【参考方案3】:

您可以将apply 与返回tuplelambda 一起使用

pd_tmp.assign(newc_olumn=pd_tmp.apply(lambda x: ('a', 2), 1))

          0         1         2 newc_olumn
0  0.373564  0.806956  0.106911     (a, 2)
1  0.332508  0.711735  0.230347     (a, 2)
2  0.516232  0.343266  0.813759     (a, 2)

【讨论】:

【参考方案4】:

我一直在寻找类似的东西,但就我而言,我希望元组是现有列的组合,而不仅仅是一个固定值。我找到了下面的解决方案,我分享它希望它对像我这样的其他人有用。

In [24]: df
Out[24]:
      A     B
0     1     2
1    11    22
2   111   222
3  1111  2222

In [25]: df['D'] = df[['A','B']].apply(tuple, axis=1)

In [26]: df
Out[26]:
      A     B             D
0     1     2        (1, 2)
1    11    22      (11, 22)
2   111   222    (111, 222)
3  1111  2222  (1111, 2222)

【讨论】:

【参考方案5】:

如前所述,诀窍是在列表 [('a', 2)] 中为每个值放置一个元组 并乘以行数或使用 apply/lambda 以下是一些额外的相关案例:

如果元组中只有一位数字,则添加逗号:

pd.DataFrame('no_comma': [(1.9)], 'with_comma': [(1.9,)])

将元组放入索引:

size = 3  
pd.DataFrame(np.random.rand(3,size), [('a',2)]*size )

【讨论】:

以上是关于如何将元组值设置为熊猫数据框?的主要内容,如果未能解决你的问题,请参考以下文章

如何将元组列表转换为 pandas 数据框,以便每个元组的第一个值代表一列?

如何将元组扩展为可变参数模板函数的参数?

如何将包含元组列表的字典中的字典转换为熊猫数据框

将元组列表的字典转换为数据框

当组值不是唯一标识时如何在熊猫中创建堆积条

如何将元组类型转换为联合?