CSV 파일을 가져와 열 레이아웃을 조정하는 좋은 솔루션이 있는 사람이 있나요?
예를 들어 헤더 + 데이터가 포함된 파일이 있습니다.
foo,bar,baz
1,2,3
하지만 열 레이아웃을 다음과 같이 변경하고 싶습니다.
qux,foo,waldo,fred,bar,baz
생성된 데이터 파일은 다음과 같습니다.
qux,foo,waldo,fred,bar,baz
,1,,,2,3
저는 CSVKit 및 기타 명령줄 도구를 사용해 왔습니다. 이는 열 조정보다는 데이터 세트 병합/조작에 더 중점을 둔 것 같습니다.
일반적이고 확장 가능한 솔루션에 대한 아이디어가 있습니까?
답변1
이 작업을 수행하는 방법에는 여러 가지가 있습니다. 사용 편의성과 확장성을 위해 Python과 이 pandas
라이브러리를 사용하는 것이 좋습니다. 필요한 주요 기능은 다음과 같습니다 pandas.read_csv()
. dataframe.to_csv()
이는 pandas 온라인 참조(pd.read_csv,데이터프레임.to_csv).
import pandas as pd
df = pd.read_csv('input.csv')
df.reindex(columns=['qux','foo','waldo','fred','bar','baz']).to_csv('outfile.csv')
답변2
안녕하세요밀러예
mlr --csv put '$qux="";$waldo="";$fred=""' then reorder -f qux,foo,waldo,fred,bar,baz input.csv
답변3
#!/bin/bash
IFS=','
while read foo bar baz waldo fred qux
do
echo $qux','$foo','$waldo','$fred','$bar','$baz
done
설명하다:
이것은 bash 쉘 스크립트입니다. 다른 쉘과 함께 사용할 수 있습니다.
IFS는 필드 구분 기호를 보유하는 환경 변수입니다.
IFS를 쉼표 문자로 설정합니다.
while 문은 모든 입력 라인을 반복합니다.
읽기 함수는 IFS(쉼표)를 사용하여 입력 행을 여러 변수로 구분합니다.
do 줄은 while 문 구조의 일부입니다. 각 입력 줄에 대해 "do"와 "done" 사이의 모든 줄이 반복됩니다.
echo 명령은 출력을 생성합니다. 각 입력 줄에 대해 "read"로 채워진 변수의 내용을 원하는 순서대로 쉼표로 구분하여 인쇄합니다.
따라서 이러한 명령문은 각 입력 줄에 대해 작동하고 각 줄을 필드로 나눈 다음 다른 순서로 필드와 함께 줄을 다시 배치합니다.
이에 대한 한 가지 잠재적인 문제는 데이터 필드에 쉼표가 포함되어 있으면 이를 알아낼 만큼 똑똑하지 않다는 것입니다.
이 셸 스크립트를 파일(예: X.sh)에 저장하면 CSV 파일을 표준 입력(stdin)으로 보내고 재정렬된 CSV 출력을 새 파일에 저장할 수 있습니다.
고양이 mycsv.txt X.sh > newcsv.txt