我正在使用一个大气候文件,其中有YYYY,MM,DD列。我想将它们合并以创建日期列,同时将所有原始数据保留在数据集中。
到目前为止,我已经设法做到了这一点,几乎可以得到我想要的东西,但是我似乎无法在date列中获得标题。
climate = pd.read_csv(r'R:\Climate\SILO\PatchedPoint\Current_csv\86090.csv')
climate.apply(pd.to_numeric, errors = 'ignore')
climate_nozero = climate.drop([0])
climate2 = climate_nozero.rename(columns = {'YYYY':'Year','MM':'Month','DD':'Day'})
index = climate2.apply(lambda x: pd.datetime.strptime("{0} {1} {2}".format(x['Year'],x['Month'], x['Day']), "%Y %m %d"),axis=1)
climate3 = pd.concat([index, climate2], axis=1)
我尝试了
climate4 = climate3.rename(columns = {'0':'Date'})
更改标题,但不执行任何操作
答案 0 :(得分:1)
假设日期列是字符串,则可以将assign()
与to_datetime()
一起使用,如下所示:
df.assign(date = pd.to_datetime(df['YYYY'] + "-" + df['MM'] + "-" + df['DD']))
YYYY MM DD foo date
0 2010 5 1 0 2010-05-01
1 2012 10 2 1 2012-10-02
2 2015 12 3 2 2015-12-03
数据:
data = {"YYYY": ["2010", "2012", "2015"],
"MM": ["5", "10", "12"],
"DD": ["1", "2", "3"],
"foo": range(3)}
df = pd.DataFrame(data)
答案 1 :(得分:0)
concat和重命名我建议直接将列分配给数据框中的命名字段。我认为以下内容可以代替您下面两行:
climate2["Date"] = climate2.apply(lambda x: pd.datetime.strptime("{0} {1} {2}".format(x['Year'],x['Month'], x['Day']), "%Y %m %d"),axis=1)
答案 2 :(得分:0)
使用to_datetime
,但必须重命名列:
data = {"YYYY": ["2010", "2012", "2015"],
"MM": ["5", "10", "12"],
"DD": ["1", "2", "3"],
"foo": range(3)}
climate_nozero = pd.DataFrame(data)
climate2 = climate_nozero.rename(columns = {'YYYY':'Year','MM':'Month','DD':'Day'})
climate2.index = pd.to_datetime(climate2[['Year','Month','Day']])
print (climate2)
Year Month Day foo
2010-05-01 2010 5 1 0
2012-10-02 2012 10 2 1
2015-12-03 2015 12 3 2
然后如果要删除列:
climate2 = climate2.drop(['Year','Month','Day'], axis=1)
print (climate2)
foo
2010-05-01 0
2012-10-02 1
2015-12-03 2
如果需要日期时间列:
climate2['date'] = pd.to_datetime(climate2[['Year','Month','Day']])
print (climate2)
Year Month Day foo date
0 2010 5 1 0 2010-05-01
1 2012 10 2 1 2012-10-02
2 2015 12 3 2 2015-12-03