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.arange
numpy 배열을 생성하고 주어진 간격 내에 값을 반환합니다.(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
>>>
보다시피, 다음과 같은 점의 증가는index
object, 변경합니다.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
'programing' 카테고리의 다른 글
MySQL에 대해 삭제된 'root' 사용자 및 암호를 복원하는 중 (0) | 2023.10.19 |
---|---|
apply_filter('the_content')가 아무것도 출력되지 않는 이유는 무엇입니까? (0) | 2023.10.19 |
argv의 문자열을 수정할 수 있습니까? (0) | 2023.10.19 |
Tymeleaf가 있는 Spring Boot - CSS를 찾을 수 없음 (0) | 2023.10.19 |
안드로이드에서 회전하는 원형 프로그레스 바를 만드는 방법? (0) | 2023.10.19 |