在python熊猫中设置日期列

时间:2018-09-17 01:02:13

标签: python pandas

当前,我有一个看起来像这样的表: Currently I have a table that looks like this

我试图为年列中的每个月提供年值(例如,9月= 09-2011、12月= 12-2011、3月= 03-2012等)。我完全迷住了如何执行此操作因为我是刚接触熊猫的新手。是否有人对如何使用熊猫进行管理有任何指示?

2 个答案:

答案 0 :(得分:1)

首先,当您提出问题时,请不要包含数据框的图像,而应包含可复制的数据。看一下this,以获取有关如何编写一个好问题的一些提示。

首先要问您表的源。例如在Excel中,您可以在那里解决问题吗?

如果您确实需要使用pandas来解决问题,这是一种方法:

首先是一些样本数据,在同一列中混合了年和月。

import pandas as pd
import numpy as np

data = pd.DataFrame({
    'key': ['2017', 'November', 'December', '2018', 'January']
})

第一步是将年份实例提取到新列中,然后“向前填充”以向前广播这些值。一行:

data['years'] = pd.Series([i if i.isnumeric() else np.nan for i in data['key']]).fillna(method = 'ffill')

现在,删除年份。在您的数据中,似乎没有相关数据。

data = data[~data['key'].str.isnumeric()]

给我们:

        key years
1  November  2017
2  December  2017
4   January  2018

答案 1 :(得分:0)

设置(可复制的示例)

df = pd.DataFrame({'col1': [np.nan,2,3,np.nan,5,6,7], 'col2': [np.nan,20,30,np.nan,50,60,70]}, index=[2011,'September', 'December', 2012, 'March','June','April'])

            col1    col2
2011        NaN     NaN
September   2.0     20.0
December    3.0     30.0
2012        NaN     NaN
March       5.0     50.0
June        6.0     60.0
April       7.0     70.0

可以做

m = pd.Series([str(x) if type(x)==int else np.nan for x in df.index])
df.index = m.ffill().astype(str) + ' ' + df.index.astype(str)

df.loc[~df.isnull().all(1),:]

                col1    col2
2011 September  2.0     20.0
2011 December   3.0     30.0
2012 March      5.0     50.0
2012 June       6.0     60.0
2012 April      7.0     70.0