如何修复:ValueError:所有数组必须具有相同的长度
在本文中,我们将修复错误:所有数组必须具有相同的长度。当我们创建具有不同长度列的 pandas 数据框时,我们会收到此错误,但是当我们创建 pandas 数据框时,列应该相等,而不是在列的缺陷单元格中可能存在 NaN。
错误:
ValueError: All arrays must be of the same length
此错误发生的案例举例:
Python3
# import pandas module
import pandas as pd
# consider the lists
sepal_length = [5.1, 4.9, 4.7, 4.6, 5.0, 5.4,
4.6, 5.0, 4.4, 4.9]
sepal_width = [4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9]
# DataFrame with two columns
df = pd.DataFrame({'sepal_length(cm)': sepal_length,
'sepal_width(cm)': sepal_width})
# display
print(df)
Python3
# importing pandas
import pandas as pd
# importing statistics
import statistics as st
# consider the lists
sepal_length = [5.1, 4.9, 4.7, 4.6, 5.0, 5.4,
4.6, 5.0, 4.4, 4.9]
sepal_width = [4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9]
# if length are not equal
if len(sepal_length) != len(sepal_width):
# Append mean values to the list with smaller length
if len(sepal_length) > len(sepal_width):
mean_width = st.mean(sepal_width)
sepal_width += (len(sepal_length)-len(sepal_width)) * [mean_width]
elif len(sepal_length) < len(sepal_width):
mean_length = st.mean(sepal_length)
sepal_length += (len(sepal_width)-len(sepal_length)) * [mean_length]
# DataFrame with 2 columns
df = pd.DataFrame({'sepal_length(cm)': sepal_length,
'sepal_width(cm)': sepal_width})
print(df)
输出:
ValueError: arrays must all be same length
错误原因:
将成为列的列表 sepal_length 的长度不等于列表 sepal_witdth 列的长度。
len(sepal_length)!= len(sepal_width)
修复错误:
可以通过将值添加到有缺陷的列表或删除长度较大的列表(如果它有一些无用的值)来修复错误。基于对列表中剩余值的观察,可以将 NaN 或任何其他值添加到缺陷值。
句法:
考虑两个列表 list1 和 list2:
if (len(list1) > len(list2)):
list2 += (len(list1)-len(list2)) * [any_suitable_value]
elif (len(list1) < len(list2)):
list1 += (len(list2)-len(list1)) * [any_suitable_value]
这里, any_suitable_value可以是列表的平均值,也可以是 0 或 NaN,具体取决于要求。
示例:
Python3
# importing pandas
import pandas as pd
# importing statistics
import statistics as st
# consider the lists
sepal_length = [5.1, 4.9, 4.7, 4.6, 5.0, 5.4,
4.6, 5.0, 4.4, 4.9]
sepal_width = [4.6, 5.0, 5.4, 4.6, 5.0, 4.4, 4.9]
# if length are not equal
if len(sepal_length) != len(sepal_width):
# Append mean values to the list with smaller length
if len(sepal_length) > len(sepal_width):
mean_width = st.mean(sepal_width)
sepal_width += (len(sepal_length)-len(sepal_width)) * [mean_width]
elif len(sepal_length) < len(sepal_width):
mean_length = st.mean(sepal_length)
sepal_length += (len(sepal_width)-len(sepal_length)) * [mean_length]
# DataFrame with 2 columns
df = pd.DataFrame({'sepal_length(cm)': sepal_length,
'sepal_width(cm)': sepal_width})
print(df)
输出: