IT

Pandas DataFrame에서 "Unnamed : 0"열을 제거하는 방법은 무엇입니까?

lottoking 2020. 8. 19. 18:51
반응형

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_csvindex_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)

참고 URL : https://stackoverflow.com/questions/36519086/how-to-get-rid-of-unnamed-0-column-in-a-pandas-dataframe

반응형