아래와 같이 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