【问题标题】:Convert DateFormat of even columns of a Pandas Dataframe转换 Pandas 数据框偶数列的日期格式
【发布时间】:2018-12-15 11:14:09
【问题描述】:

我有一个偶数列中包含日期的数据框。日期格式为 yyyy.mm.dd hh:mm:ss,我想将其转换为 yyyy-mm-dd。 我通过过滤偶数列并像这样使用 dt.strftime 来实现:

even_cols = range(0, df.shape[1], 2)
df.iloc[:, even_cols] = df.iloc[:, even_cols].dt.strftime('%Y-%m-%d')

但我得到了这个错误

"AttributeError: 'DataFrame' 对象没有属性 'dt'"

【问题讨论】:

  • dt 访问器是 pd.Series 而非 pd.Dataframes 的一种方法,您正试图一次将 dt 访问器应用于多个列。
  • 嗯,我现在明白为什么它不分叉了.. 那我该怎么办?迭代?
  • 使用如下语法:df[['A','B']] = df[['A','B']].apply(lambda x: x.dt.strftime('%Y-%m-%d'))
  • 还是不行,我不是从所有偶数列的第2行开始,我不能使用列名,因为他们事先不知道df.iloc[2:, even_cols] = df.iloc[2:, even_cols].apply(lambda x: x.dt.strftime('%Y-%m-%d'))
  • 看下面的例子。运行它,看看它是否有效,然后尝试修改以适应您的情况。

标签: pandas type-conversion strftime


【解决方案1】:

试试这个:

df=pd.DataFrame({'A':pd.date_range('2018-01-01', periods=10),'B':pd.date_range('2018-02-01', periods=10),
                'C':pd.date_range('2018-03-01', periods=10),'D':pd.date_range('2018-04-01', periods=10)})

even_cols = [1,3]
df.iloc[:, even_cols] = df.iloc[:, even_cols].apply(lambda x: x.dt.strftime('%Y-%m-%d'))

输出df.info():

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 10 entries, 0 to 9
Data columns (total 4 columns):
A    10 non-null datetime64[ns]
B    10 non-null object
C    10 non-null datetime64[ns]
D    10 non-null object
dtypes: datetime64[ns](2), object(2)
memory usage: 400.0+ bytes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2023-04-04
    • 2020-09-20
    • 2021-12-24
    • 1970-01-01
    相关资源
    最近更新 更多