Python matplotlib-日期时间值系列中无值
我正试图策划一系列的日期。由于数据集不完整,序列中有一些None值,这会导致错误 这篇文章成功地处理了类似的问题 但我无法将其应用于datetime.date值的列表 我的代码是Python matplotlib-日期时间值系列中无值,python,numpy,matplotlib,Python,Numpy,Matplotlib,我正试图策划一系列的日期。由于数据集不完整,序列中有一些None值,这会导致错误 这篇文章成功地处理了类似的问题 但我无法将其应用于datetime.date值的列表 我的代码是 import matplotlib.pyplot as plt import datetime import numpy as np fig, ax1 = plt.subplots() keys = ["a", "b", "c", "d"
import matplotlib.pyplot as plt
import datetime
import numpy as np
fig, ax1 = plt.subplots()
keys = ["a", "b", "c", "d"]
series_one = np.array(
[
datetime.date(2020, 11, 13),
datetime.date(2021, 2, 28),
datetime.date(2021, 3, 31),
datetime.date(2021, 4, 30),
]
)
series_two = np.array(
[
datetime.date(2020, 11, 13),
datetime.date(2021, 2, 28),
datetime.date(2021, 3, 31),
None,
]
)
series_three = np.array(
[
datetime.date(2020, 11, 13),
None,
datetime.date(2021, 3, 31),
datetime.date(2020, 2, 1),
]
)
ax1.scatter(series_one, keys)
ax1.scatter(series_two, keys)
ax1.scatter(series_three, keys)
错误消息:
使用非类型时
AttributeError: 'NoneType' object has no attribute 'toordinal
当使用float(“NaN”)时,表示无
AttributeError: 'float' object has no attribute 'toordinal'
这里的核心问题是,您正在传递异构数据列表:
datetime
对象和None
。
的确,同样的问题也发生在您链接的问题中。这个问题可以用float('nan')
解决,因为float('nan')
是一个浮点元素,因此列表中的所有元素都是相同的类型
很抱歉,但我认为您不需要手动删除None,并使用辅助函数作为
def do_掩码(x,y):
掩码=无
掩码=~(x==无)
返回np.array(x)[掩码],np.array(y)[掩码]
使用它如下
导入matplotlib.pyplot作为plt
导入日期时间
将numpy作为np导入
图,ax1=plt.子批次()
键=[“a”、“b”、“c”、“d”]
系列_one=np.array(
[
日期时间。日期(2020年11月13日),
日期时间。日期(2021年2月28日),
日期时间。日期(2021年3月31日),
日期时间。日期(2021年4月30日),
]
)
级数_two=np.array(
[
日期时间。日期(2020年11月13日),
日期时间。日期(2021年2月28日),
日期时间。日期(2021年3月31日),
没有一个
]
)
系列_三=np数组(
[
日期时间。日期(2020年11月13日),
没有一个
日期时间。日期(2021年3月31日),
日期时间。日期(2021年3月31日),
]
)
ax1.散点(*do_掩码(系列之一,键))
ax1.散点(*do_掩码(系列_2,键))
ax1.散点(*do_遮罩(系列_三,键))
这里的核心问题是传递异构数据列表:datetime
对象和None
。
的确,同样的问题也发生在您链接的问题中。这个问题可以用float('nan')
解决,因为float('nan')
是一个浮点元素,因此列表中的所有元素都是相同的类型
很抱歉,但我认为您不需要手动删除None,并使用辅助函数作为
def do_掩码(x,y):
掩码=无
掩码=~(x==无)
返回np.array(x)[掩码],np.array(y)[掩码]
使用它如下
导入matplotlib.pyplot作为plt
导入日期时间
将numpy作为np导入
图,ax1=plt.子批次()
键=[“a”、“b”、“c”、“d”]
系列_one=np.array(
[
日期时间。日期(2020年11月13日),
日期时间。日期(2021年2月28日),
日期时间。日期(2021年3月31日),
日期时间。日期(2021年4月30日),
]
)
级数_two=np.array(
[
日期时间。日期(2020年11月13日),
日期时间。日期(2021年2月28日),
日期时间。日期(2021年3月31日),
没有一个
]
)
系列_三=np数组(
[
日期时间。日期(2020年11月13日),
没有一个
日期时间。日期(2021年3月31日),
日期时间。日期(2021年3月31日),
]
)
ax1.散点(*do_掩码(系列之一,键))
ax1.散点(*do_掩码(系列_2,键))
ax1.散点(*do_遮罩(系列_三,键))
由于您的系统将它们绘制为散点图,因此顺序并不重要。您可以为非零元素的ndarray
s编制索引:
导入matplotlib.pyplot作为plt
导入日期时间
将numpy作为np导入
系列_one=np.array(
[
日期时间。日期(2020年11月13日),
日期时间。日期(2021年2月28日),
没有一个
日期时间。日期(2021年4月30日),
]
)
idx=series_one.nonzero()[0].tolist()
plt.散射(系列_-one[idx],np.阵列(键)[idx])
因为这是numpy的一项功能,所以在切片之前,您需要将列表keys
转换为ndarray
:np.array(keys)[idx]
由于您的系统将它们绘制为散点图,因此顺序并不重要。您可以为非零元素的
ndarray
s编制索引:
导入matplotlib.pyplot作为plt
导入日期时间
将numpy作为np导入
系列_one=np.array(
[
日期时间。日期(2020年11月13日),
日期时间。日期(2021年2月28日),
没有一个
日期时间。日期(2021年4月30日),
]
)
idx=series_one.nonzero()[0].tolist()
plt.散射(系列_-one[idx],np.阵列(键)[idx])
因为这是numpy的一项功能,所以在切片之前,您需要将列表keys
转换为ndarray
:np.array(keys)[idx]
对我来说,似乎“无”将返回1680年,你也得到了同样的结果吗?你希望在最终结果中看到“无”的位置出现什么情况?@ombk我只是因为“无”值而崩溃。谢谢。似乎没有人会为我返回1680年,你也得到了同样的结果吗?你想在最终结果中看到没有人的地方看到什么?@ombk我只是因为没有值而崩溃了。谢谢。谢谢。这个解决方案非常有效。太好了=)@Banillie您可能想“接受”一个有效的解决方案,这样有类似问题的人可以更快地找到合适的答案。谢谢。这个解决方案非常有效。太好了=)@Banillie您可能想“接受”其中一个有效的解决方案可以让有类似问题的人更快地找到合适的答案谢谢这个解决方案非常有效。