pandas .to_markdown()中的日期时间格式

wwtsj6pe  于 2023-04-19  发布在  其他
关注(0)|答案(2)|浏览(80)

我有一个pandas DataFrame,它有一个dtype datetime列:

import pandas as pd

# Mock-up data
df = pd.DataFrame({'year': [2015, 2016],
                   'month': [2, 3],
                   'day': [4, 5]})
df = pd.to_datetime(df)

print(df)

# 0   2015-02-04
# 1   2016-03-05
# dtype: datetime64[ns]

我想使用.to_markdown()方法来显示这个DataFrame。
但是,.to_markdown()方法以科学计数法显示日期时间:

print(df.to_markdown())

# |    |           0 |
# |---:|------------:|
# |  0 | 1.42301e+18 |
# |  1 | 1.45714e+18 |

有没有一种方法可以让.to_markdown()方法以更易于阅读的方式显示这些日期?.to_latex().to_csv().to_string()方法已经这样做了:

# Other .to_ methods behave as desired, eg.
print(df.to_latex())

# \begin{tabular}{ll}
# \toprule
# {} &          0 \\
# \midrule
# 0 & 2015-02-04 \\
# 1 & 2016-03-05 \\
# \bottomrule
# \end{tabular}

pandas版本:1.3.2
列表版本:0.8.9

y1aodyip

y1aodyip1#

.to_markdown()方法使用了tabulate包。floatfmt命名参数可以用来控制浮点数的格式,但我看不出它在这里有什么用处。
我目前能找到的最好的解决方案是在调用.to_markdown()方法之前将datetime列格式化为字符串列:

print(df.astype(str).to_markdown())

# |    | 0          |
# |---:|:-----------|
# |  0 | 2015-02-04 |
# |  1 | 2016-03-05 |
r6vfmomb

r6vfmomb2#

到目前为止,格式化时间戳的功能是一个开放的增强功能:https://github.com/astanin/python-tabulate/issues/67
在实现之前,如果 Dataframe 包含多个列,它可以(只是)将timestamp列转换为文本(类似于@jwalton所做的):

df['datetime'] = df['datetime'].apply(lambda dt: dt.strftime("%Y-%m-%d %H:%M"))
df.to_markdown()

相关问题