【问题标题】:Messing up the time numbers and trying to sort them弄乱时间数字并尝试对其进行排序
【发布时间】:2022-10-08 14:36:28
【问题描述】:

我有一个这样的 excel 文件,我希望将日期字段编号转换为历史记录,如 (2021.7.22) 并在历史记录字段中使用 Python 再次替换。

一个朋友给我发了一个几乎可以回答我的代码,但代码中仍然存在错误。

这是我使用的代码

import pandas as pd
dfs = pd.read_excel('apal.xlsx', sheet_name=None)
output = {}
for ws, df in dfs.items():
    if 'date' in df.columns:
        df['date'] = df['date'].apply(lambda x: f'{str(x)[:4]}.'
        f'{str(x)[4:6 if len(str(x)) > 7 else 5]}.{str(x)[-2:]}')
    output[ws] = df
writer = pd.ExcelWriter('TestOutput.xlsx')

for ws, df in output.items():
    df.to_excel(writer, index=None, sheet_name=ws)
writer.save()
writer.close()

但是输出有一个错误,并且在某些数据中,月份的数字被重写在当天的数字旁边。

和2021.3.32一样,其实我的原始数据中根本不存在这样一个数字

【问题讨论】:

  • 如何解释 2021111: 2021.1.112021.11.1 之类的内容?
  • 值 2021111 应该解析为 2021.01.11 还是 2021.11.01?我认为格式不是明确的。
  • 你有什么问题?如果您正在寻求修复错误的帮助,您已经尝试了哪些,哪些没有奏效?请阅读How to Ask
  • 你从哪里得到这个 Excel 文件?使用这种模糊的日期格式,您最好获取一个具有明确日期格式或 Excel 的内置日期/时间数据类型的新文件。

标签: python pandas


【解决方案1】:

您需要解决像2021111 这样的日期的歧义。第一次,您可以使用pd.to_datetime

df['date2'] = pd.to_datetime(df['date'], format='%Y%m%d').dt.strftime('%Y.%-m.%-d')
print(df)

# Output
       date      date2
0   2021227  2021.2.27
1   2021228  2021.2.28
2    202131   2021.3.1
3    202132   2021.3.2
4    202133   2021.3.3
5    202136   2021.3.6
6    202137   2021.3.7
7    202138   2021.3.8
8    202139   2021.3.9
9   2021310  2021.3.10
10  2021313  2021.3.13
11  2021314  2021.3.14
12  2021315  2021.3.15
13  2021111  2021.11.1  # <- default interpretation of 2021111

【讨论】:

  • 你是个好人 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2020-06-04
  • 2014-06-07
  • 1970-01-01
相关资源
最近更新 更多