在Python / Pandas中定义日期格式

时间:2016-09-26 10:38:14

标签: python python-2.7 csv pandas

我在Python中使用Pandas模块连接了两个.csv文件。一列是日期,格式为" dd.mm.yyyy"。

现在我想从中提取月份(作为前导零的2位整数)以供进一步使用。

到目前为止,我完成了这项工作,但我不得不作弊。 Python认为我得到的字符串是DAY。我不喜欢半生不熟的东西,所以我想问一下社区如何告诉Python具体日期是哪个部分是月份,以便它可以归还给我?

这是我到目前为止所做的:

import pandas

def saison(input):
    if input == "04" or input == "05" or input == "06" or input == "07" or input == "08" or input == "09":
        return "Sommer"
    else:
        return "Winter"

df_1 = pandas.read_csv("a.csv", sep=';', names=["DWD_ID", "Datum"], header=0)
df_2 = pandas.read_csv("b.csv", sep=';', names=[VEG", "DWD_ID"], header=0)
df_joined = pandas.merge(df_1, df_2, on="DWD_ID")
df_joined["Datum"] = pandas.to_datetime(df_joined["Datum"])

df_joined["Saison"] = saison(df_joined["Datum"].apply(lambda x: x.strftime('%d')))

如果我使用

x.strftime('%m') 
相反,它让我回归那一天。

2 个答案:

答案 0 :(得分:1)

首先,您似乎在datetime中交换了月和日,因此您需要将参数format='%Y-%d-%m'添加到to_datetimePython's strftime directives):

df = pd.DataFrame({'Date': ['2016-24-02']})  
print (df)
         Date
0  2016-24-02

print (pd.to_datetime(df.Date, format='%Y-%d-%m'))
0   2016-02-24
Name: Date, dtype: datetime64[ns]

转换后,您可以使用:

dt.strftime

print (df.Date.dt.strftime('%m'))

提取month的另一个解决方案,然后转换为string,最后按zfill添加零填充:

print (df.Date.dt.month.astype(str).str.zfill(2))

样品:

start = pd.to_datetime('2015-02-24')
rng = pd.date_range(start, periods=10, freq='m')

df = pd.DataFrame({'Date': rng})  
print (df)
        Date
0 2015-02-28
1 2015-03-31
2 2015-04-30
3 2015-05-31
4 2015-06-30
5 2015-07-31
6 2015-08-31
7 2015-09-30
8 2015-10-31
9 2015-11-30


print (df.Date.dt.strftime('%m'))
0    02
1    03
2    04
3    05
4    06
5    07
6    08
7    09
8    10
9    11
Name: Date, dtype: object
print (df.Date.dt.month.astype(str).str.zfill(2))
0    02
1    03
2    04
3    05
4    06
5    07
6    08
7    09
8    10
9    11
Name: Date, dtype: object

最后,您可以将numpy.where条件与isin一起使用:

saison = ["04","05","06","07","08","09"]
df['Saison'] = np.where(df.Date.dt.strftime('%m').isin(saison), 'Sommer','Winter')
print (df)
        Date  Saison
0 2015-02-28  Winter
1 2015-03-31  Winter
2 2015-04-30  Sommer
3 2015-05-31  Sommer
4 2015-06-30  Sommer
5 2015-07-31  Sommer
6 2015-08-31  Sommer
7 2015-09-30  Sommer
8 2015-10-31  Winter
9 2015-11-30  Winter

答案 1 :(得分:1)

您可以在to_datetime的参数中提供您想要保留的格式:

pd.to_datetime(df['date_col'], format="%d.%m.%Y").dt.month.astype(str).str.zfill(2)
相关问题