2016-09-26 13 views
0

PythonでPandasモジュールを使用して2つの.csvファイルを結合しました。 1つの列は "dd.mm.yyyy"という形式の日付です。Python/Pandasで日付形式を定義する

今度は、それ以降の使用のために月(2桁のゼロの先頭の整数)を抽出したいと思います。

私は今まで仕事を遂行しましたが、私はカンニングしなければなりませんでした。 Pythonは、私が得る文字列がDAYであると考えています。私は半分焼いたものが好きではないので、私はPythonに日付のどの部分が月なのかを具体的にどのように伝えることができるのかコミュニティに尋ねたかったので、返すことができます。ここで

は、私がこれまで持っているものです:私は

x.strftime('%m') 

を使用する場合は

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'))) 

ではなく、その日私を返します。

答えて

1

あなたクーロンあなたが保持したいフォーマットをto_datetime

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

'dayfirst = True'でも動作しますが、' format'は速くなります。何か問題が起こったら、自動的にあなたの意見に合わない選択をするのではなく失敗します。 – Goyo

+1

それは仕事をした!ありがとう! – Khaled

+0

@Khaled、私はこれを含むあなたの以前の質問の回答を受け入れていないことを知っています;-)あなたの問題を解決したら確かに(チェックマークをクリックして)それらを受け入れるべきです。これは、将来、このページの上に来る人に、この解決策が問題を解決するために働いたことを示しています。 –

1

まず、あなたが(Python's strftime directivesto_datetimeに引数format='%Y-%d-%m'を追加する必要があるので、あなたは、日時にスワップ月と日を持っているようだ:

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 

最終あなたはisinを条件とnumpy.whereを使用することができます。

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 
+0

ありがとう!抽出月のソリューションが機能しました! – Khaled

+0

私の回答が参考になった場合は、[受け入れ](http://meta.stackexchange.com/a/5235/295067)を忘れないでください。ありがとう。 ** ONCE **ソリューションのみを受け入れることができます。 – jezrael