Python熊猫,密谋。日期和显示出现问题

问题描述 投票:0回答:1

对不起,我是新来的。我有一个清晰的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()

你们有什么想法我可以做些更好的图表?

图片有助于了解:https://i.imgur.com/3Vi9xFi.png

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

如果我使用df [“ date”],我将无法阻止从同一月份将条目集中到一个地方。如果我使用df.index,则似乎无法根据日期列来命名x轴条目。

python pandas plotly
1个回答
0
投票

您有2种选择,取决于您想要的东西

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

data = [
    ["20200119", 50],
    ["20200115", 40],
    ["20200105", 30],
    ["20191215", 40],
    ["20191120", 35],
    ["20191115", 12],
]

1。按类别绘制

默认情况下,plotly将日期设置为日期,您可以使用以下方式覆盖它:

df = pd.DataFrame(data, columns=["date", "farts"])
df["date"] = "D" + df["date"] # Add a string so that plotly won't transform to date

fig = px.bar(df, x="date", y='farts')

2。每月重采样

如果要绘制每月日期,应避免重复。为此,您可以重新采样并对每个月的所有条目进行meansum

df = pd.DataFrame(data, columns=["date", "farts"])
df["date"] = pd.to_datetime(df["date"], format="%Y%m%d")
df = df.resample('MS', on='date').mean() # You should not have duplicates
df = df.reset_index() # You need date as a column with plotly express

fig = px.bar(df, x="date", y='farts')
© www.soinside.com 2019 - 2024. All rights reserved.