如何从 pandas 样式对象中的日期时间列中删除时间戳

How to remove timestamp from datetime column in pandas Style Object

我有一个 DataFrame,其日期列没有时间戳:

但是一旦我将 style 应用于 df 中的另一列,例如:

df = df.style.applymap(colorFunction, subset=['column3'])

DataFrame 变成了一个 Style Object,并且 "Date" 列获得了之前没有的时间戳,如以下:

我尝试了以下方法从日期列中删除时间戳:

df['Date'].style.apply(lambda x: x.strftime('%Y-%m-%d'))

我收到以下错误:

TypeError: 'Styler' object is not subscriptable

有没有办法从 Style 对象中删除时间戳?

这只是权宜之计,但您可以手动指定日期列的常用 %Y-%m-%d 显示格式,如下所示:

styled = (df.style
            .applymap(colorFunction, subset=['column3'])
            .format({'Date': '{:%Y-%m-%d}'}))

示例

# Example data
df = pd.DataFrame({'Date': pd.date_range('2020-01-01', 
                                         '2020-01-05', 
                                         freq='d'),
                   'Value': list(range(-2, 3))})

# Example color function
def f(v):
    return 'color: red;' if v < 0 else None

# Unexpected addition of H:M:S to date column
df.style.applymap(f, subset='Value')

# Specify desired date format
df.style.applymap(f, subset='Value').format({'Date': '{:%Y-%m-%d}'}))

除了@Peter Leimbigler 提供的好答案之外,作为替代解决方案,在应用 Style 之前将 Date 列转换为字符串可防止 Styler 格式化程序添加时间戳。

df['Date'] = df['Date'].astype(str)

以彼得为例:

# Example data
df = pd.DataFrame({'Date': pd.date_range('2020-01-01', 
                                         '2020-01-05', 
                                         freq='d'),
                   'Value': list(range(-2, 3))})

# Example color function
def f(v):
    return 'color: red;' if v < 0 else None

# Converting the Date column to a string before applying the Style
df['Date'] = df['Date'].astype(str)

df.style.applymap(f, subset='Value')