无法使用解构赋值分配函数 return 值
Unable to assign function return value with destructuring assignment
我想在一个函数中拆分一个字母和一个数字,return 这两个值并使用解构赋值将它们分配给变量,如下所示:
def split_string(str):
if str is not np.nan:
match = re.search("(\w{1})(\d{1,3})", str)
if match is not None:
return match.group(0), match.group(1)
return None, None
函数return得到想要的结果,例如:
0 (None, None)
1 (C, 85)
2 (None, None)
3 (C, 123)
但是,如果我尝试分配结果,我会得到一个 ValueError(data
是来自 CSV 的 Pandas DataFrame,而 data.strings
是一列字符串和 NaN's):
a, b = data.strings.apply(split_string)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-108-40dc67dc859d> in <module>()
6 return None, None
7
----> 8 a, b = data.strings.apply(split_string)
ValueError: too many values to unpack (expected 2)
然而,这工作正常:
def test(x, y):
return x, y
a, b = test(1, 2)
我在这里错过了什么?我真的很想能够在一行中为整列处理和分配 return 值。谢谢!
应用returns一个系列或数据框。
http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.apply.html
使用 Series
所描述的字符串定义示例数据框。
>>> data = pd.DataFrame({'strings': ['the', 'test', 'data', np.nan, 'end']})
>>> a = data.strings.apply(split_string)
>>> a
0 (None, None)
1 (None, None)
2 (None, None)
3 (None, None)
4 (None, None)
如果您想在一行中创建两个新列,您可以使用 zip
。
>>> a, b = zip(*data.strings.apply(split_string))
>>> a
(None, None, None, None, None)
>>> b
(None, None, None, None, None)
我们可以将它们作为一行中的新列直接分配给 data
。
>>> data['a'], data['b'] = zip(*data.strings.apply(split_string))
>>> data
string a b
0 the None None
1 test None None
2 data None None
3 NaN None None
4 end None None
我想在一个函数中拆分一个字母和一个数字,return 这两个值并使用解构赋值将它们分配给变量,如下所示:
def split_string(str):
if str is not np.nan:
match = re.search("(\w{1})(\d{1,3})", str)
if match is not None:
return match.group(0), match.group(1)
return None, None
函数return得到想要的结果,例如:
0 (None, None)
1 (C, 85)
2 (None, None)
3 (C, 123)
但是,如果我尝试分配结果,我会得到一个 ValueError(data
是来自 CSV 的 Pandas DataFrame,而 data.strings
是一列字符串和 NaN's):
a, b = data.strings.apply(split_string)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-108-40dc67dc859d> in <module>()
6 return None, None
7
----> 8 a, b = data.strings.apply(split_string)
ValueError: too many values to unpack (expected 2)
然而,这工作正常:
def test(x, y):
return x, y
a, b = test(1, 2)
我在这里错过了什么?我真的很想能够在一行中为整列处理和分配 return 值。谢谢!
应用returns一个系列或数据框。
http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.DataFrame.apply.html
使用 Series
所描述的字符串定义示例数据框。
>>> data = pd.DataFrame({'strings': ['the', 'test', 'data', np.nan, 'end']})
>>> a = data.strings.apply(split_string)
>>> a
0 (None, None)
1 (None, None)
2 (None, None)
3 (None, None)
4 (None, None)
如果您想在一行中创建两个新列,您可以使用 zip
。
>>> a, b = zip(*data.strings.apply(split_string))
>>> a
(None, None, None, None, None)
>>> b
(None, None, None, None, None)
我们可以将它们作为一行中的新列直接分配给 data
。
>>> data['a'], data['b'] = zip(*data.strings.apply(split_string))
>>> data
string a b
0 the None None
1 test None None
2 data None None
3 NaN None None
4 end None None