TypeError:float() 参数必须是字符串或数字,而不是与散点图相关的“datetime.time”

Posted

技术标签:

【中文标题】TypeError:float() 参数必须是字符串或数字,而不是与散点图相关的“datetime.time”【英文标题】:TypeError: float() argument must be a string or a number, not 'datetime.time' in relation with a scatter plot 【发布时间】:2021-10-29 23:27:57 【问题描述】:

我创建了以下 DataFrame: date_merge 作为示例,因为我实际上想显示全天的温度值。

df_time = filtered_df_date["longtime"].dt.time
df_date = filtered_df_date["longtime"].dt.date

filtered_df_date:

index longtime
52754 2020-01-01 00:00:00
52755 2020-01-01 00:32:00
52756 2020-01-01 00:33:00
... ...
53261 2020-01-01 23:59:00
date_merge = pd.merge(df_time, df_date, left_index=True, right_index=True)
date_merge = pd.merge(date_merge, pickd_column_df, left_index=True, right_index=True)
index longtime_time longtime_date value
52755 00:32:00 2020-01-01 23.3
52757 00:34:00 2020-01-01 23.3
52759 00:37:00 2020-01-01 NaN
52760 00:38:00 2020-01-01 NaN
52761 00:39:00 2020-01-01 naN
.... ... ... ...
53261 23:59:00 2020-01-01 23.9

现在我以 x 轴上的 longtime_date 为例:

ax = date_merge.plot(x ="longtime_date" , y="value" , kind="scatter" ,figsize=[15, 5], linewidth=0.1, alpha=0.6, color="#003399")
plt.show()

它没有错误。 如果我现在使用 longtime_time 而不是 longtime_date 作为 x 轴,我会收到以下错误消息

ax = date_merge.plot(x ="longtime_time" , y="value" , kind="scatter" ,figsize=[15, 5], linewidth=0.1, alpha=0.6, color="#003399")
plt.show()

TypeError: float() 参数必须是字符串或数字,而不是 'datetime.time'

更多信息:

print(date_merge["longtime_time"].dtype)

输出:

对象

print(date_merge["longtime_date"].dtype)

输出:

对象

print(date_merge["temperature_ers_lite_1_wermser_0_elsys_0"].dtype)

输出:

float64

【问题讨论】:

你能提供数据集吗? 看起来您需要做的是将longtime_time 列从datetime.time 转换为str 是的,这可以工作 在您的原始帖子中发布 是的,那行得通。您可以将刻度标签更改为仅显示时间。给我几分钟,我会在此处将其添加到解决方案中。 【参考方案1】:

好的,所以我认为问题是您需要将该列转换为 str

所以在绘图之前的某个时间点:

date_merge['longtime_time'] = date_merge['longtime_time'].astype(str)
ax = date_merge.plot(x ="longtime_time" , y="value" , kind="scatter" ,figsize=[15, 5], linewidth=0.1, alpha=0.6, color="#003399")
plt.show()

或者可以这样做:

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.dates as mdates

date_merge = pd.DataFrame(
[['2020-01-01 00:32:00' ,23.3],
['2020-01-01 00:34:00'      ,23.3],
['2020-01-01 00:37:00'      ,np.nan],
['2020-01-01 00:38:00'      ,np.nan],
['2020-01-01 00:39:00'      ,np.nan],
['2020-01-01 23:59:00'      ,23.9]],
columns = ['longtime'       ,'value'])

date_merge["longtime"] = pd.to_datetime(date_merge["longtime"])

ax = date_merge.plot(x ="longtime" , y="value" , kind="scatter" ,figsize=[15, 5], linewidth=0.1, alpha=0.6, color="#003399")

timeFmt = mdates.DateFormatter('%H:%M:%S')
ax.xaxis.set_major_formatter(timeFmt)
plt.xticks(rotation=90)
plt.show()

【讨论】:

以上是关于TypeError:float() 参数必须是字符串或数字,而不是与散点图相关的“datetime.time”的主要内容,如果未能解决你的问题,请参考以下文章

Pandas :TypeError: float() 参数必须是字符串或数字,而不是 'pandas._libs.interval.Interval'

TypeError:float() 参数必须是字符串或数字,而不是与散点图相关的“datetime.time”

为啥在带有字符串和 NaN 的系列上得到“TypeError:'float' 类型的参数不可迭代”?

LabelEncoder -- TypeError: 参数必须是字符串或数字

TypeError:int() 参数必须是字符串或数字,而不是 'datetime.datetime'

TypeError:参数必须是字符串或数字列上的字符串或数字