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

tvz2xvvm  于 2023-02-07  发布在  其他
关注(0)|答案(2)|浏览(132)

我已经创建了以下数据框:date_merge作为一个例子,因为我实际上想显示一天中的温度值。

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

过滤的DF日期:
| 指标|长期的|
| - ------|- ------|
| 小行星52754|2020年01月01日00时00分|
| 小行星52755|2020年1月1日00时32分|
| 小行星52756|2020年1月1日00时33分|
| ...|...|
| 小行星53261|2020年1月1日23时59分|

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)

| 指标|长时间|长期日期|价值|
| - ------|- ------|- ------|- ------|
| 小行星52755|00时32分|2020年1月1日|二十三点三|
| 小行星52757|00时34分|2020年1月1日|二十三点三|
| 小行星52759|00时37分|2020年1月1日|钠氮|
| 小行星52760|00时38分|2020年1月1日|钠氮|
| 小行星52761|00时39分|2020年1月1日|钠氮|
| - -|...|...|...|
| 小行星53261|23时59分|2020年1月1日|二十三点九|
现在我在x轴上绘制longon_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()


它工作没有错误。如果我现在使用longion_time代替longion_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)

输出:
浮动64

9udxz4iz

9udxz4iz1#

好的,我认为问题是您需要将该列转换为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()
siv3szwd

siv3szwd2#

我会把它描述为类型问题和时间问题的组合:

  • pandas.DatetimeIndex.date--〉返回一个datetime.date对象,而
  • pandas.DatetimeIndex.time--〉返回datetime.time对象

第一个对象本质上与datetime.datetime相同,而后者只是时间,没有日期信息。可以说,这并不重要,因为它们都表示数字。然而,在实践中,datetime.time值被含糊地处理并被拒绝。
您可以使用字符串强制,如其他答案所示,或者另一种方法是使用表达式减去日期部分,只留下时间信息(但不修改对象类型):

s.index = ( s.index - s.index.floor('D') )

相关问题