【问题标题】:Unpack two variables into two columns in DataFrame将两个变量解压缩到 DataFrame 中的两列中
【发布时间】:2017-03-03 21:42:54
【问题描述】:

我有一个名为 ReturnDateRange 的函数,它将返回两个日期。 我正在尝试将此函数应用于数据帧中名为“zRow”的列,并将结果存储在两个不同的列中。

下面会将两个结果存储为一列中的元组:

df['t1']= df['zRow'].map(ReturnDateRange)

以下返回 ValueError: Too many values to unpack (expected 2)

df['t1'], df['t2']= df['zRow'].map(ReturnDateRange)

但是该函数总是返回两个日期,或者一个 None。

更新:我尝试返回两个零而不是无。仍然得到同样的错误。

感谢您的帮助。

【问题讨论】:

  • df['t1'], df['t2']= pd.Series(df['zRow'].map(ReturnDateRange)) 工作吗?
  • 我得到相同的 ValueError(解包的值太多)
  • 我预计@EdChum 的建议会奏效。我建议您提供更多信息。使用这篇文章作为提供什么信息的指南。 stackoverflow.com/help/mcve
  • 试试 df['t1']= df['zRow'].map(ReturnDateRange[0])

标签: python pandas dataframe


【解决方案1】:

“要解压的值太多”错误是因为它解压了行,而不是列。因此,transpose 会有所帮助,但我觉得有更好的方法来解决这个问题。

与此同时,这个工作,如果不是很优雅......

import pandas as pd
import numpy as np

data = pd.DataFrame(np.zeros(shape=(5,2)),columns=["a","b"])

def mapper(x):
    return ('first', 'second')

data['t1'], data['t2'] = data['b'].map(mapper).apply(pd.Series).values.T

print data

给出这个结果:

     a    b     t1      t2
0  0.0  0.0  first  second
1  0.0  0.0  first  second
2  0.0  0.0  first  second
3  0.0  0.0  first  second
4  0.0  0.0  first  second

这至少可以帮助其他人找到更好的解决方案。

感谢this 也在这里发帖。

编辑,找到了更好的修复方法。使用:

data[['t1', 't2']] = data['b'].map(mapper).apply(pd.Series)

所以,在你的情况下,这应该有效:

df[['t1', 't2']] = df['zRow'].map(ReturnDateRange).apply(pd.Series)

【讨论】:

    猜你喜欢
    • 2018-12-15
    • 2012-09-24
    • 1970-01-01
    • 2016-07-31
    • 2022-01-19
    • 1970-01-01
    • 2015-12-29
    • 2019-07-03
    • 2021-10-18
    相关资源
    最近更新 更多