programing

Pandas DataFrame에 대한 인덱스를 1에서 시작합니다.

codeshow 2023. 10. 19. 22:54
반응형

Pandas DataFrame에 대한 인덱스를 1에서 시작합니다.

CSV에 Pandas DataFrame을 작성할 때 인덱스가 0이 아닌 1에서 시작해야 합니다.

예는 다음과 같습니다.

In [1]: import pandas as pd

In [2]: result = pd.DataFrame({'Count': [83, 19, 20]})

In [3]: result.to_csv('result.csv', index_label='Event_id')                               

이를 통해 다음과 같은 출력을(를)

In [4]: !cat result.csv
Event_id,Count
0,83
1,19
2,20

하지만 제가 원하는 결과는 다음과 같습니다.

In [5]: !cat result2.csv
Event_id,Count
1,83
2,19
3,20

저는 이것이 제 데이터 프레임에 1로 이동된 정수 시퀀스를 열로 추가함으로써 가능하다는 것을 깨달았지만, 저는 팬더가 처음이고 더 깨끗한 방법이 있는지 궁금합니다.

인덱스는 개체이고 기본 인덱스는 다음에서 시작합니다.0:

>>> result.index
Int64Index([0, 1, 2], dtype=int64)

이 인덱스를 다음과 같이 이동할 수 있습니다.1와 함께

>>> result.index += 1 
>>> result.index
Int64Index([1, 2, 3], dtype=int64)

CSV에 쓰기 전에 인덱스만 설정하면 됩니다.

df.index = np.arange(1, len(df) + 1)

그리고 정상적으로 써주세요.

출처: Python pandas에서는 추가 열을 만들지 않고인덱스를 0이 아닌 1부터 시작합니다.

작동 예:

import pandas as pdas
dframe = pdas.read_csv(open(input_file))
dframe.index = dframe.index + 1

한 줄의 또 다른 방법:

df.shift()[1:]

이거 나한테 통했어요.

 df.index = np.arange(1, len(df)+1)

내 생각에 가장 좋은 방법은 지수를 a로 설정하는 것입니다.

import pandas as pd

result = pd.DataFrame(
    {'Count': [83, 19, 20]}, 
    index=pd.RangeIndex(start=1, stop=4, name='index')
)
>>> result
       Count
index       
1         83
2         19
3         20

이것이 더 좋습니다. 왜냐하면 당신이 범위와 가능성을 정의할 수 있기 때문입니다.step그리고.name한 줄의 인덱스에 대한 값입니다.

이 제품을 사용할 수 있습니다.

import pandas as pd

result = pd.DataFrame({'Count': [83, 19, 20]})
result.index += 1
print(result)

아니면 이건, 도움을 받음으로써numpy다음과 같은 라이브러리:

import pandas as pd
import numpy as np

result = pd.DataFrame({'Count': [83, 19, 20]})
result.index = np.arange(1, len(result)+1)
print(result)

np.arangenumpy 배열을 생성하고 주어진 간격 내에 값을 반환합니다.(1, len(result)+1)그리고 마침내 당신은 그 배열을result.index.

Tom Augspurger의 답변에 따라, 우리는 리스트 이해를 사용할 수 있습니다.np.arrange(), 이를 통해 모듈을 가져오기 위한 요구사항이 제거됩니다.numpy. 대신 다음을 사용할 수 있습니다.

df.index = [i+1 for i in range(len(df))]

원래 답변에서 약간의 센트를 제공합니다.

  • 틀리지 않았다면 버전 0.23부터 인덱스 개체는RangeIndex유형

공식 문서로 부터:

RangeIndex는 메모리 절약 특별한 경우입니다.Int64Index단조 범위를 나타내는 것으로 제한됩니다.사용.RangeIndex경우에 따라서는 컴퓨팅 속도를 향상시킬 수 있습니다.

인덱스 범위가 큰 경우, 전체 인덱스를 한 번에 정의하는 대신 인덱스의 표현을 사용하는 것이 타당합니다(메모리 절약).

따라서 예제(영상 시리즈를 사용하지만 DataFrame에도 적용됨):

>>> import pandas as pd
>>> 
>>> countries = ['China', 'India', 'USA']
>>> ds = pd.Series(countries)
>>> 
>>>
>>> type(ds.index)
<class 'pandas.core.indexes.range.RangeIndex'>
>>> ds.index
RangeIndex(start=0, stop=3, step=1)
>>> 
>>> ds.index += 1
>>> 
>>> ds.index
RangeIndex(start=1, stop=4, step=1)
>>> 
>>> ds
1    China
2    India
3      USA
dtype: object
>>> 

보다시피, 다음과 같은 점의 증가는indexobject, 변경합니다.start그리고.stop매개 변수들.

데이터 프레임을 만드는 동안 ".shift()[1:]"를 추가합니다.

data = pd.read_csv(r"C:\Users\user\path\data.csv").shift()[1:]

원하는 작업을 수행하는 열이 추가됩니다.

df.insert(0,"Column Name", np.arange(1,len(df)+1))

언급URL : https://stackoverflow.com/questions/20167930/start-index-at-1-for-pandas-dataframe

반응형