Kel*_*ref 2 python dataframe pandas
我有一个名为 ReturnDateRange 的函数,它将返回两个日期。我正在尝试将此函数应用于数据帧中名为“zRow”的列,并将结果存储在两个不同的列中。
下面将两个结果存储为一列中的元组:
df['t1']= df['zRow'].map(ReturnDateRange)
Run Code Online (Sandbox Code Playgroud)
以下返回 ValueError: Too many values to unpack (expected 2)
df['t1'], df['t2']= df['zRow'].map(ReturnDateRange)
Run Code Online (Sandbox Code Playgroud)
但是该函数总是返回两个日期,或者一个 None。
更新:我尝试返回两个零而不是 None。仍然得到同样的错误。
谢谢您的帮助。
小智 5
“解包的值太多”错误是因为它解包了行,而不是列。因此转置会有所帮助,但我觉得有一个更好的方法来解决这个问题。
与此同时,这很有效,如果不是很优雅的话......
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
Run Code Online (Sandbox Code Playgroud)
给出这个结果:
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
Run Code Online (Sandbox Code Playgroud)
这至少可以帮助其他人确定更好的解决方案。
也归功于这篇文章。
编辑,找到了一个更好的方法来修复它。用:
data[['t1', 't2']] = data['b'].map(mapper).apply(pd.Series)
Run Code Online (Sandbox Code Playgroud)
所以,在你的情况下,这应该有效:
df[['t1', 't2']] = df['zRow'].map(ReturnDateRange).apply(pd.Series)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |