2017-09-27 11 views
1

別の列を分割することによってパンダDATAFRAMEで新しい列を作成:ここで私は、次のデータフレーム持って二回

      NAME 
0 this_is_a_sample_2017-09-08.csv 
1 this_is_a_sample_2017-09-09.csv 
2 this_is_a_sample_2017-09-10.csv 
3 this_is_a_sample_2017-09-11.csv 
4 this_is_a_sample_2017-09-12.csv 
5 this_is_a_sample_2017-09-13.csv 

すると、それを作成するためのコードは次のとおりです。

rows = ['this_is_a_sample_2017-09-08','this_is_a_sample_2017-09-09','this_is_a_sample_2017-09-10','this_is_a_sample_2017-09-11','this_is_a_sample_2017-09-12','this_is_a_sample_2017-09-13'] 
df = pd.DataFrame(rows, columns = ['NAME']) 

私が持っている新しい列が欲しいですその中の名前の日付部分だけ。

      NAME  DATE 
0 this_is_a_sample_2017-09-08.csv 2017-09-08 
1 this_is_a_sample_2017-09-09.csv 2017-09-09 
2 this_is_a_sample_2017-09-10.csv 2017-09-10 
3 this_is_a_sample_2017-09-11.csv 2017-09-11 
4 this_is_a_sample_2017-09-12.csv 2017-09-12 

私は次のことを試してみました:

df['DATE'] = df.NAME.str.split(".")[0].split('_')[-1] 

私はしかし私のインデックスそれは[0]それを使用しているとき、私は二回、列を分割し、リストから日付を取得できると思っていたデータフレームは、次のようになり結果リストである最初の行の値を選択します。

答えて

4

df['Date'] = df['NAME'].str.split(".").str[0].str.split('_').str[-1] 
 
         NAME  Date 
0 this_is_a_sample_2017-09-08 2017-09-08 
1 this_is_a_sample_2017-09-09 2017-09-09 
2 this_is_a_sample_2017-09-10 2017-09-10 
3 this_is_a_sample_2017-09-11 2017-09-11 
4 this_is_a_sample_2017-09-12 2017-09-12 
5 this_is_a_sample_2017-09-13 2017-09-13 
0

ないあなたが持っている理由「スプリットを( 『』)、」あなたが本当に必要なのはこれです、本当にわからすなわち、一連の索引を選択するの.strアクセサ使用:

df['DATE'] = df['NAME'].str.split('_').str[-1] 

          NAME  DATE 
0 this_is_a_sample_2017-09-08 2017-09-08 
1 this_is_a_sample_2017-09-09 2017-09-09 
2 this_is_a_sample_2017-09-10 2017-09-10 
3 this_is_a_sample_2017-09-11 2017-09-11 
4 this_is_a_sample_2017-09-12 2017-09-12 
5 this_is_a_sample_2017-09-13 2017-09-13 
+0

私は質問を設定したときに私が逃した。すべての行の値の最後に ".csv"があります!私は自分の質問を編集したり、これを指摘してくれてありがとう! –

2

または使用正規表現

df['Date'] = df['NAME'].str.extract('.*?_(\d+-\d+-\d+).csv', expand = False) 


    NAME       Date 
0 this_is_a_sample_2017-09-08.csv 2017-09-08 
1 this_is_a_sample_2017-09-09.csv 2017-09-09 
2 this_is_a_sample_2017-09-10.csv 2017-09-10 
3 this_is_a_sample_2017-09-11.csv 2017-09-11 
4 this_is_a_sample_2017-09-12.csv 2017-09-12 
5 this_is_a_sample_2017-09-13.csv 2017-09-13 

または@エヴァンが提案したように、

df['Date'] = df['NAME'].str.extract('([\d-]+)', expand = False) 
+2

あなたの正規表現は ''([\ d - ] +)' 'に単純化できます –

関連する問題