以下のようにcsv形式のデータセットがあります(6000行)。
Store,Date,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment
1,05-02-2010,1643690.9,0,42.31,2.572,211.0963582,8.106
1,12-02-2010,1641957.44,1,38.51,2.548,211.2421698,8.106
---
---
日付列を分割して、年だけを含む新しい列を作成したいと思います。このような:
Store,Date,Year,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment
1,05-02-2010,2010,1643690.9,0,42.31,2.572,211.0963582,8.106
1,12-02-2010,2010,1641957.44,1,38.51,2.548,211.2421698,8.106
このコードを使用しようとしていますが、問題を解決するために修正する方法がわかりません。 年を抽出する方法...
誰でも私にアドバイスを与えることができますか?
答え1
私はcsv
次のような適切なパーサーを使用します。csvkit
:
csvsql --query "select Store,Date,strftime('%Y', Date) as Year,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment from data" data.csv
出力:
Store,Date,Year,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment
1,2010-05-02,2010,1643690.9,0,42.31,2.572,211.0963582,8.106
1,2010-12-02,2010,1641957.44,1,38.51,2.548,211.2421698,8.106
ただし、これを使用してこれを行うには、awk
次のようにします。
awk '
BEGIN{FS=OFS=","}
NR==1{$2="Date,Year"}
NR>1 {sub(/[0-9]{4}/, "&,&", $2)}
1' data.csv
答え2
awk 'BEGIN{FS=OFS=","}NR==1{gsub("Date","Date,year",$0)} NR>1 {$2=$2","substr($2,7,4)}1' filename
Store,Date,year,Weekly_Sales,Holiday_Flag,Temperature,Fuel_Price,CPI,Unemployment
1,05-02-2010,2010,1643690.9,0,42.31,2.572,211.0963582,8.106
1,12-02-2010,2010,1641957.44,1,38.51,2.548,211.2421698,8.106