[英]Convert date format from "month_name day, year" to "yyyy-mm-dd" in BigQuery
[英]How to find the number of the day in a year from yyyy-mm-dd using Pandas?
我有此数据:
Date Time VCD
20041001 184531 293.7
20041001 202316 305.4
20041002 175015 322.9
20041002 192822 316.6
20041003 183314 334.4
我正在使用此代码
import pandas as pd
import numpy as np
import datetime as dt
frame1=pd.DataFrame(data1, columns=['Date','Time','VCD'])
clw1 = frame1.drop_duplicates('Date', keep='last')
使用clw1删除带有新列'DateTime'的重复数据yyyy-mm-dd
Date Time VCD DateTime
20041001 184531 293.7 2004-10-01
20041002 175015 322.9 2004-10-02
20041003 183314 334.4 2004-10-03
我正在尝试获取年份的日期,月份的数量和月份的日期(在frame1中添加相应的列,例如,在frame1中为年份中的天添加新列(2001.1 .... 365))
frame1['doye'] = frame1['DateTime'].apply(lambda x: dt.DatetimeIndex.dayofyear('DateTime'))
但是错误:AttributeError:Pandas 0.20.2版本的模块'datetime'没有属性'DatetimeIndex'可能我对Pandas和datetime的概念有疑问,许多解决方案建议使用单独的数据(值)或对于旧的Pandas版本,如何我是否使用dataframe处理列?
这是一种方法。 %j
格式代码提供每年的日期。
>>> import pandas as pd
>>> df = pd.DataFrame(['20041001', '20041002', '20041003'])
>>> df[0] = pd.to_datetime(df[0])
>>> df
0
0 2004-10-01
1 2004-10-02
2 2004-10-03
>>> df['day_of_year'] = df[0].apply(lambda x: int(datetime.datetime.strftime(x,'%j')))
>>> df
0 day_of_year
0 2004-10-01 275
1 2004-10-02 276
2 2004-10-03 277
尝试使用此:
frame1["doye"] = frame1.DateTime.apply(lambda s: s.timetuple().tm_yday)
这会将一个函数应用于DateTime列,因此lambda将返回col中的每个datetime。 因此s
是一个DateTime对象。 我使用timetuple()
函数获取一个time.struct_time
对象,该对象具有成员tm_yday
来提供一年中的日期。
这是我的(草率的)测试代码:
将numpy导入为np
import datetime as dt
data1 = [ {"Date" : "20041001", "Time" : 184531}]
frame1=pd.DataFrame(data1, columns=['Date','Time'])
frame1["DateTime"]= pd.to_datetime(frame1.Date, format="%Y%m%d", errors='raise')
print frame1
frame1["doye"] = frame1.DateTime.apply(lambda s: s.timetuple().tm_yday)
print frame1
输出为:
Date Time DateTime
0 20041001 184531 2004-10-01
Date Time DateTime doye
0 20041001 184531 2004-10-01 275
嗯,在这里阅读.dt
访问器...熊猫系列的.dt
访问器将系列的每个成员都视为日期时间,因此,当将其应用于整个系列时,所有内容都必须是日期时间。 当您将其应用于系列中的列时, apply()
函数将获取datetime对象,而不是系列,因此必须使用datetime方法。
因此,我们不要使用apply()
。 选择日期时间的列将为您提供一系列,然后可以使用.dt
打开,因此示例变为:
import pandas as pd
import numpy as np
import datetime as dt
data1 = [ {"Date" : "20041001", "Time" : 184531}]
frame1=pd.DataFrame(data1, columns=['Date','Time'])
frame1["DateTime"]= pd.to_datetime(frame1.Date, format="%Y%m%d", errors='raise')
print frame1
frame1["doye"] = frame1.DateTime.dt.dayofyear
print frame1
下面的代码应执行您期望的所有步骤:
import pandas as pd
import datetime as dt
frame1 = pd.DataFrame({"Date" : [20041001, 20041001, 20041002, 20041002, 20041003],
"Time": [184531, 202316, 175015, 192822, 183314],
"VCD": [293.7, 305.4, 322.9, 316.6, 334.4]})
clw1 = frame1.drop_duplicates("Date")
clw1["Datetime"] = clw1["Date"].apply(lambda x: dt.datetime.strptime(str(x), "%Y%m%d"))
clw1["doye"] = clw1["Datetime"].apply(lambda x: int(dt.datetime.strftime(x,'%j')))
clw1
输出是:
>>> clw1
Date Time VCD Datetime doye
0 20041001 184531 293.7 2004-10-01 00:00:00 275
2 20041002 175015 322.9 2004-10-02 00:00:00 276
4 20041003 183314 334.4 2004-10-03 00:00:00 277
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.