将日期时间和字符串列表成字符串

List with datetimes and strings into strings

我正在打开一个 Excel 文件,其中包含 pandas 数据框,但不知何故,这些列部分格式化为字符串,部分格式化为日期。我不想在 Excel 中更改它的所有内容,因为文件每个月都会更新,所以我想知道是否有办法将其全部转换为一种格式(最好是字符串,但日期时间也可以)。这里的代码:

    import pandas as pd     
    df = pd.read_excel("monthly_budget.xlsx", sheet_name=sheet1, index_col=0)
    test = list(df.columns)
    print(test)

输出:

['State', 'September 2018', 'October 2018', 'November 2018', 'December 2018', 'January 2019', 'February 2019', 'March 2019', 'April 2019', 'May 2019', 'June 2019', 'July 2019', 'August 2019', 'September 2019', 'October 2019', 'November 2019', 'December 2019', 'January 2020', 'February 2020', 'March 2020', 'April 2020', 'May 2020', datetime.datetime(2020, 6, 1, 0, 0), datetime.datetime(2020, 7, 1, 0, 0), datetime.datetime(2020, 8, 1, 0, 0)]

我希望有一些简洁的列表理解,但无法让它发挥作用。

您可以调整列表理解中的列格式,然后将数据框列设置为调整后的列表。

>>> cols_fixed = [i.strftime(format="%B %Y") if type(i) is datetime.datetime else i for i in test]
>>> cols_fixed
['State', 'September 2018', 'October 2018', 'November 2018', 'December 2018', 'January 2019', 'February 2019', 'March 2019', 'April 2019', 'May 2019', 'June 2019', 'July 2019', 'August 2019', 'September 2019', 'October 2019', 'November 2019', 'December 2019', 'January 2020', 'February 2020', 'March 2020', 'April 2020', 'May 2020', 'June 2020', 'July 2020', 'August 2020']
>>> df.columns = cols_fixed
>>> df
  State September 2018 October 2018  ... June 2020 July 2020 August 2020
0     a              a            a  ...         a         a           a
1     b              b            b  ...         b         b           b

[2 rows x 25 columns]