Python 巨蟒盘踞在地上。日期和显示有问题

Python 巨蟒盘踞在地上。日期和显示有问题,python,pandas,plotly,Python,Pandas,Plotly,对不起,我是普洛特利的新手。 我有一个清晰的pd.DataFrame,上面有顺序的日期 初始日期的格式为:YYYYMMDD。 当我试图转换它时,plotly会将日期显示为我只能描述为随机数的日期(在悬停文本中)。经过大量搜索,我发现我的变通方法(参见代码)是唯一的解决方案 但真正的问题是:正如你所看到的,每个月都有不同数量的条目。当我删除这一天时,会将一个月的所有条目都放在同一个位置。 当我使用x=df.index时,我得到了最好的结果,但是我没有日期的可视化。 我希望每个条目之间都有间隙,并有

对不起,我是普洛特利的新手。
我有一个清晰的pd.DataFrame,上面有顺序的日期

初始日期的格式为:YYYYMMDD。
当我试图转换它时,plotly会将日期显示为我只能描述为随机数的日期(在悬停文本中)。经过大量搜索,我发现我的变通方法(参见代码)是唯一的解决方案

但真正的问题是:正如你所看到的,每个月都有不同数量的条目。当我删除这一天时,会将一个月的所有条目都放在同一个位置。
当我使用x=df.index时,我得到了最好的结果,但是我没有日期的可视化。 我希望每个条目之间都有间隙,并有一个清晰的视觉提示,显示哪个条目属于哪个月份。
我会在文章末尾加上一个图片来更好地解释我的问题(英语不是我的第一语言……)

守则:

import pandas as pd
import plotly.express as px

columns = ["date", "farts"]
df = pd.read_csv('test.csv', sep=',', engine='python', names=columns)

# Using a smaller made up csv file for testing. It looks like this:
# 20200119, 50
# 20200115, 40
# 20200105, 30
# 20191215, 40
# 20191120, 35
# 20191115, 12

print(df)

df["date"] = pd.to_datetime(df["date"], format="%Y%m%d")

df["date"] = df["date"].dt.strftime('%Y-%m')

print(df)

#works very well so far:

# before:

#        date  farts
# 0  20200119     50
# 1  20200115     40
# 2  20200105     30
# 3  20191215     40
# 4  20191120     35
# 5  20191115     12

# after:

#       date  farts
# 0  2020/01     50
# 1  2020/01     40
# 2  2020/01     30
# 3  2019/12     40
# 4  2019/11     35
# 5  2019/11     12

fig = px.bar(df, x="date", y='farts', width=1000, height=350)
fig.show()
你们知道我该怎么做才能得到一张更好看的图表吗

图片有助于理解:

编辑:尝试了一下,我越来越沮丧。要么不显示,要么日期颠倒,等等

如果我使用df[“date”],我无法停止将同一个月的条目集中到一个地方。

如果使用df.index,我似乎无法根据日期列命名x轴条目。

根据需要,您有两个选项

首先,让我们为示例创建数据:

数据=[
["20200119", 50],
["20200115", 40],
["20200105", 30],
["20191215", 40],
["20191120", 35],
["20191115", 12],
]
1.按类别打印 默认情况下,plotly将日期设置为日期,您可以使用以下内容覆盖该日期:

df=pd.DataFrame(数据,列=[“日期”,“放屁])
df[“date”]=“D”+df[“date”]#添加一个字符串,以便plotly不会转换为日期
图=px.bar(df,x=“日期”,y=“放屁”)
2.每月重采样 如果你想绘制每月的日期,你应该避免重复。要做到这一点,您可以对每个月的所有条目重新取样并进行
平均值
总和

df=pd.DataFrame(数据,列=[“日期”,“放屁])
df[“date”]=pd.to_datetime(df[“date”],格式=“%Y%m%d”)
df=df.resample('MS',on='date').mean()#您不应该有重复的
df=df.reset_index()#需要使用plotly express将日期作为列
图=px.bar(df,x=“日期”,y=“放屁”)

IIUC您可以打印并更新xtick名称的布局

将熊猫作为pd导入
导入plotly.graph_objs作为go
将plotly.express导入为px
从io导入StringIO
df=“”日期,放屁
20200119, 50
20200115, 40
20200105, 30
20191215, 40
20191120, 35
20191115, 12"""
df=pd.read_csv(StringIO(df))
df[“date”]=pd.to_datetime(df[“date”],格式=“%Y%m%d”)\
.dt.strftime(“%Y-%m”)
df=df.sort_值(“日期”).reset_索引(drop=True)
plotly.graph\u objs
fig=go.Figure()
图添加轨迹(go.Bar(x=df.index,y=df[“farts”]))
图1.2.2.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1(
xaxis=dict(
tickmode='array',
tickvals=df.index,
ticktext=df[“日期”]
)
)
图2(图3)
plotly.express
px.bar(df,x=df.index,y=“farts”) 图1.2.2.1.1.1.1.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.1.2.2.2.2.2.2.2.2.2.2.2.2.2.2.2.1.1.2.1.1.1.1.1.1.1.1.1.1.1.1.1( xaxis=dict( tickmode='array', tickvals=df.index, ticktext=df[“日期”] ) ) 输出是相同的

如果您在图表之前设置索引(“日期”),会发生什么?谢谢您的回答。1.不起作用,“D”行给出错误。2.这不是一个好的解决方案,因为我想将每个条目分开。这是因为您正在使用
pd.to\u datetime
,而您不应该这样做。我对答案进行了编辑,使其更加清晰。