我得到一个ValueError的错误:无法强制为系列,长度必须为1:给定0



我想在python中运行此代码,但收到了以下错误:ValueError: Unable to coerce to Series, length must be 1: given 0。我已经阅读了一个CSV文件,并想运行这个代码:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from numpy.core.fromnumeric import sort
## import data set
data = pd.read_csv('trial_incomes.csv')
print(data.head(10))
def H_function(*args):
Hash=[]
for i in args:
hashedfunction=(6*(i)+1) % 5
Hash+=hashedfunction
print (Hash)

H_function(data)  

错误:

ValueError                                Traceback (most recent call last)
Input In [58], in <cell line: 9>()
5         Hash+=hashedfunction
6         print (Hash)
----> 9 H_function(data)
Input In [58], in H_function(*args)
3 for i in args:
4     hashedfunction=(6*(i)+1) % 5
----> 5     Hash+=hashedfunction
6     print (Hash)
File ~miniforge3libsite-packagespandascoreopscommon.py:72, in _unpack_zerodim_and_defer.<locals>.new_method(self, other)
68             return NotImplemented
70 other = item_from_zerodim(other)
---> 72 return method(self, other)
File ~miniforge3libsite-packagespandascorearraylike.py:107, in OpsMixin.__radd__(self, other)
105 @unpack_zerodim_and_defer("__radd__")
106 def __radd__(self, other):
--> 107     return self._arith_method(other, roperator.radd)
File ~miniforge3libsite-packagespandascoreframe.py:7584, in DataFrame._arith_method(self, other, op)
7581 axis = 1  # only relevant for Series other case
7582 other = ops.maybe_prepare_scalar_for_op(other, (self.shape[axis],))
-> 7584 self, other = ops.align_method_FRAME(self, other, axis, flex=True, level=None)
7586 new_data = self._dispatch_frame_op(other, op, axis=axis)
7587 return self._construct_result(new_data)
File ~miniforge3libsite-packagespandascoreops__init__.py:283, in align_method_FRAME(left, right, axis, flex, level)
279         raise ValueError(
280             f"Unable to coerce list of {type(right[0])} to Series/DataFrame"
281         )
282     # GH17901
--> 283     right = to_series(right)
285 if flex is not None and isinstance(right, ABCDataFrame):
286     if not left._indexed_same(right):
File ~miniforge3libsite-packagespandascoreops__init__.py:240, in align_method_FRAME.<locals>.to_series(right)
238 else:
239     if len(left.columns) != len(right):
--> 240         raise ValueError(
241             msg.format(req_len=len(left.columns), given_len=len(right))
242         )
243     right = left._constructor_sliced(right, index=left.columns)
244 return right
ValueError: Unable to coerce to Series, length must be 1: given 0

好吧,有很多事情你还没有告诉我们,但问题来了。

您对DataFrame的处理是错误的。您正在将数据帧传递给具有参数列表(*args)的函数。这就把数据帧变成了一个迭代器,当你迭代一个数据帧时,它会变成一组列。因此,args最终成为一个包含单列数据的列表,即熊猫系列。当您执行for i in args:时,i最终成为整列。您最终会对整列进行计算,但当您尝试将该列添加到列表中时,不支持该操作。

我假设你的CSV文件有一列数字,你想在循环中对该列的每一行进行数学运算。如果是这样,这就是你想要的:

import pandas as pd
import numpy as np
data = pd.read_csv('x.csv')
print(data.head(10))
def H_function(*args):
Hash=[]
for i in args:
hashedfunction=(6*(i)+1) % 5
Hash.append(hashedfunction)
return Hash

print(H_function(data['income']))

使用此输入:

income
1234.00
2345.00
3456.00
4576.00
12000.00
24000.00
36000.00
48000.00
60000.00
921.11
922.22
933.33

我得到这个输出:

income
0   1234.00
1   2345.00
2   3456.00
3   4576.00
4  12000.00
5  24000.00
6  36000.00
7  48000.00
8  60000.00
9    921.11
[0     0.00
1     1.00
2     2.00
3     2.00
4     1.00
5     1.00
6     1.00
7     1.00
8     1.00
9     2.66
10    4.32
11    0.98
Name: income, dtype: float64]

相关内容

  • 没有找到相关文章

最新更新