如何使用 Python 将转换为日期和月份的列的值替换为文本?

分享于2022年12月29日 csv if-statement python 问答
【问题标题】:How to replace value of a column converted to day and month to a text using Python?如何使用 Python 将转换为日期和月份的列的值替换为文本?
【发布时间】:2022-12-28 16:40:17
【问题描述】:

我如何在 Python 中实现这一点?源文件是一个 CSV 文件,该文件中一列的值从数字转换为日期和月份。非常感谢你提前。

示例如下:

专栏图片: room column

在我的 python 脚本中,值应该如下所示:

1-Feb ---> 2-1
2-Feb ---> 2-2
3-Mar ---> 3-3
4-Mar ---> 3-4

这是我的脚本。

import os
import pandas as pd

directory = 'C:/Path'
ext = ('.csv')

for filename in os.listdir(directory):
f = os.path.join(directory, filename)

if f.endswith(ext):

    head_tail = os.path.split(f)
    head_tail1 = 'C:/Path'
    k =head_tail[1]
    r=k.split(".")[0]

    p=head_tail1 + "/" + r + " - Revised.csv"
    mydata = pd.read_csv(f)


    # to pull columns and values
    new = mydata[["A","Room","C","D"]]
    new = new.rename(columns={'D': 'Qty. of Parts'})
    new['Qty. of Parts'] = 1
    new.to_csv(p ,index=False)

    #to merge columns and values
    merge_columns = ['A', 'Room', 'C']
    merged_col = ''.join(merge_columns).replace('ARoomC', 'F')
    new[merged_col] = new[merge_columns].apply(lambda x: '.'.join(x), axis=1)

    new.drop(merge_columns, axis=1, inplace=True)
    new = new.groupby(merged_col).count().reset_index()
    new.to_csv(p, index=False)

  • 您可以发布 CSV 文件的前几行吗?
  • 你好。源文件正确吗?我想在这里发布它,但出于安全目的我不能。我的目标是从 1-Feb ---> 2-1、2-Feb ---> 2-2、3-Mar ---> 3-3、4-Mar --> 替换该列中的值-> 3-4。谢谢

【解决方案1】:

如果您想将字符串转换为日期以便稍后获取值

import datetime
# datetime.datetime(1900, 2, 1, 0, 0)
d = datetime.datetime.strptime("1-Feb", "%d-%b")
print(f'{d.month}-{d.day}')

结果:

2-1

【讨论】:

  • 只是为了澄清 strptime 参数, %b = Month 作为语言环境的缩写名称,请在此处查看所有“格式代码” docs.python.org/3/library/…
  • 嗨,迭戈,感谢您提供的脚本和您共享的文档。我正在尝试将它插入我的脚本中,但是我遇到了很多行错误 :) 您能不能告诉我我应该把您的脚本放在哪里?非常感谢你。
  • 不仅是 1-Feb ---> 2-1、2-Feb ---> 2-2、3-Mar ---> 3-3、4-Mar ---> 3-4 必须转换但是任何带有 - 从更改为日期格式的列中的值都需要用它的原始文本替换。如果可能的话,我将非常感谢您对此的投入。太感谢了。