Pandas DataFrame에서 "Unnamed : 0"열을 제거하는 방법은 무엇입니까?
내가 읽기에있어서 상황이 csv
에서 df
내가 원치 않는 곳과 같은 이름 열을 거기에 unnamed:0
.
file.csv
,A,B,C
0,1,2,3
1,4,5,6
2,7,8,9
CSV는 다음과 같이 읽습니다.
pd.read_csv('file.csv')
Unnamed: 0 A B C
0 0 1 2 3
1 1 4 5 6
2 2 7 8 9
이것은 매우 성가신 일입니다! 누구든지 서열 제거하는 방법에 대한 유전자 유전자가 있습니까?
그것은 색인 열이며, index=False
쓰지 않도록 전달 하고 문서를 참조하십시오.
예 :
In [37]:
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc'))
pd.read_csv(io.StringIO(df.to_csv()))
Out[37]:
Unnamed: 0 a b c
0 0 0.109066 -1.112704 -0.545209
1 1 0.447114 1.525341 0.317252
2 2 0.507495 0.137863 0.886283
3 3 1.452867 1.888363 1.168101
4 4 0.901371 -0.704805 0.088335
비교 :
In [38]:
pd.read_csv(io.StringIO(df.to_csv(index=False)))
Out[38]:
a b c
0 0.109066 -1.112704 -0.545209
1 0.447114 1.525341 0.317252
2 0.507495 0.137863 0.886283
3 1.452867 1.888363 1.168101
4 0.901371 -0.704805 0.088335
바로으로 read_csv
다음을 전달하여 첫 번째 열이 색인 열임을 알 수 있습니다 index_col=0
.
In [40]:
pd.read_csv(io.StringIO(df.to_csv()), index_col=0)
Out[40]:
a b c
0 0.109066 -1.112704 -0.545209
1 0.447114 1.525341 0.317252
2 0.507495 0.137863 0.886283
3 1.452867 1.888363 1.168101
4 0.901371 -0.704805 0.088335
이 문제는 CSV가 RangeIndex
일반적으로 이름이없는 CSV 파일과 함께 저장 되었기 때문에 가능성이 가능성이 있습니다 . DataFrame을 사용하면 실제로 수정해야합니다.
문제를 시나리오 : read_csv
와 index_col
인수
IMO, 가장 간단한 해결책은 이름이 지정되지 않은 열을 인덱스 로 읽는 것 입니다. 에 index_col=[0]
인수를 지정하면 pd.read_csv
첫 번째 열을 색인으로 읽습니다.
df = pd.DataFrame('x', index=range(5), columns=list('abc'))
df
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
# Save DataFrame to CSV.
df.to_csv('file.csv')
pd.read_csv('file.csv')
Unnamed: 0 a b c
0 0 x x x
1 1 x x x
2 2 x x x
3 3 x x x
4 4 x x x
# Now try this again, with the extra argument.
pd.read_csv('file.csv', index_col=[0])
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
참고 DataFrame에 시작할 인덱스가없는 경우 출력 CSV를 만들 때를
사용하여 처음부터이를 방지 할 수 있습니다index=False
.df.to_csv('file.csv', index=False)
그러나 위에서 언급했듯이 이것이 항상 옵션은 아닙니다.
Stopgap 솔루션 : 필터링 str.match
CSV 파일을 읽기 / 쓰기 할 수있는 코드를 수정할 수없는 경우, 당신은 할 수 필터링하여 열을 제거 하여 str.match
:
df
Unnamed: 0 a b c
0 0 x x x
1 1 x x x
2 2 x x x
3 3 x x x
4 4 x x x
df.columns
# Index(['Unnamed: 0', 'a', 'b', 'c'], dtype='object')
df.columns.str.match('Unnamed')
# array([ True, False, False, False])
df.loc[:, ~df.columns.str.match('Unnamed')]
a b c
0 x x x
1 x x x
2 x x x
3 x x x
4 x x x
이것이 발생할 수있는 또 다른 경우 csv
는 각 행이 쉼표로 끝나도록 데이터가 부적절하게 쓰여진 경우 입니다. 이렇게하면 Unnamed: x
데이터를 .NET 파일로 읽으려고 할 때 데이터 끝에 이름이없는 열이 남게됩니다 df
.
명명되지 않은 모든 열을 이용하려면 다음과 같은 정규식을 사용할 수도 있습니다. df.drop(df.filter(regex="Unname"),axis=1, inplace=True)
'IT' 카테고리의 다른 글
자바 펼쳐의 Number.sign () (0) | 2020.08.19 |
---|---|
기술적으로 s3n, s3a 및 s3의 차이점은 무엇입니까? (0) | 2020.08.19 |
배열 변수의 크기가 main에서와 동일하지 않은 이유는 무엇입니까? (0) | 2020.08.19 |
클래스 정의에서 정적 const 정수 멤버 정의 (0) | 2020.08.19 |
동일한 컴퓨터에서 여러 버전의 Google 크롬을 사용할 수 있습니까? (0) | 2020.08.19 |