【发布时间】:2015-05-29 15:07:27
【问题描述】:
作为一个在数据分析领域花费更多时间而不是正确编程的人,只是在寻找一种最佳方法(向你们所有人致敬)。非常简单的大型 ETL 项目,但在 Python 中手动编码,这是第一次。固定宽度文件已成功读入初始 PANDAS df。
我正在尝试添加一个带有静态月末日期值(例如 2014 年 1 月 31 日)的新列,以指示“数据月份”以进行进一步的 EDW 处理。最终,我将使用 datetime/timedelta 功能将此值作为我在实用程序服务器上 CRON 时自动生成的值传递。
我的困惑似乎是关于使用哪个函数(apply、mapapply 等),如果我需要引用原始 df 中的索引值以将完全不相关的值应用于初始 df,并且最优化, pythonic方式来完成这个。
当前参考:“Python for Data Analysis”,PANDAS Docs。谢谢!
编辑
下面是一些固定宽度数据的小例子:
5151022314
5113 22204
111 20018
这是一些将其读入 PANDAS df 的代码:
import pandas as pd
import numpy as np
path = 'C:\Users\Office\Desktop\example data.txt'
widths = [2, 3, 5]
names = (['STATE_CD', 'CNTY_CD', 'ZIP_CD',])
df = pd.read_fwf(path, names=names, widths=widths, header=0)
对于上面的示例日期,这应该返回类似这样的 df:
STATE_CD,CNTY_CD,ZIP_CD
51,510,22314
51,1 ,22204
11,3 ,20018
我要做的是为所有行添加一个像这样的列“DATA_MM”:
STATE_CD,CNTY_CD,ZIP_CD, DATA_MM
51,510,22314,2014-01-31
51,1 ,22204,2014-01-31
11,3 ,20018,2014-01-31
最终,我希望利用这样的东西来生成在这个月度工作开始时自动应用的价值:
import datetime
today = datetime.date.today()
first = datetime.date(day=1, month=today.month, year=today.year)
lastMonth = first - datetime.timedelta(days=1)
print lastMonth.strftime("%Y-%m-%d")
【问题讨论】:
-
给我们一个可复制粘贴运行的完整最小示例,以及它应该返回的结果示例。 (产生这些也是很好的编程实践。)
-
当你说“唯一”时,你是指每一行一个值,还是整列一个值?
-
编辑@cphlewis 感谢您的及时回复。根据您的要求,我添加了一个基本示例。 @ASGM 我的意思是整列每一行的值都相同
标签: python python-2.7 date pandas etl