과제 SO 질문에 응답하는 데있어 가장 어려운 측면 중 하나는 문제를 재현하는 데 걸리는 시간 (데이터 포함)입니다. 데이터를 명확하게 재현 할 수없는 질문에 대한 답변이 적습니다. 질문을 작성하는 데 시간이 걸리고 도움이 필요한 문제가있는 경우 다른 사람이 문제를 해결하는 데 사용할 수있는 데이터를 제공하여 쉽게 도움을 줄 수 있습니다.
좋은 팬더 질문을 작성하기 위해 @Andy가 제공하는 지침은 시작하기에 좋은 장소입니다. 자세한 정보 는 요청 방법 및 최소, 완료 및 검증 가능한 예제 작성 방법을 참조하십시오 .
질문을 명확하게 진술하십시오. 질문과 샘플 코드를 작성하는 데 시간이 걸리면 질문을 읽고 독자에게 문제를 요약하고 명확하게 설명하는 '실행 요약'을 제공하십시오.
원래 질문 :
이 데이터가 있습니다 ...
나는 이것을하고 싶다 ...
내 결과가 다음과 같이 보이기를 원합니다 ...
그러나 [this]를 시도하면 다음과 같은 문제가 발생합니다.
나는 [this]와 [that]을함으로써 해결책을 찾으려고 노력했다.
어떻게 고치나요?
제공된 데이터 양, 샘플 코드 및 오류 스택에 따라 독자는 문제가 무엇인지 이해하기 전에 먼 길을 가야합니다. 질문 자체가 맨 위에 오도록 질문을 정리 한 다음 필요한 세부 사항을 제공하십시오.
수정 된 질문 :
인용 : 어떻게해야합니까?
나는 [this]와 [that]을함으로써 해결책을 찾으려고 노력했다.
[이것]을 시도하면 다음과 같은 문제가 발생합니다.
최종 결과는 다음과 같습니다.
내 문제를 재현 할 수있는 최소한의 코드가 있습니다 ...
다음은 샘플 데이터를 재생성하는 방법입니다.
df = pd.DataFrame({'A': [...], 'B': [...], ...})
필요한 경우 샘플 데이터 제공 !!!
때로는 DataFrame의 머리 또는 꼬리 만 있으면됩니다. @JohnE에서 제안한 방법을 사용하여 다른 사람이 재생할 수있는 더 큰 데이터 집합을 만들 수도 있습니다. 그의 예제를 사용하여 주가의 100 행 DataFrame을 생성합니다.
stocks = pd.DataFrame({
'ticker':np.repeat( ['aapl','goog','yhoo','msft'], 25 ),
'date':np.tile( pd.date_range('1/1/2011', periods=25, freq='D'), 4 ),
'price':(np.random.randn(100).cumsum() + 10) })
이것이 실제 데이터 인 경우 다음과 같이 데이터 프레임의 머리 및 / 또는 꼬리를 포함시킬 수 있습니다 (민감한 데이터를 익명화해야 함).
>>> stocks.head(5).to_dict()
{'date': {0: Timestamp('2011-01-01 00:00:00'),
1: Timestamp('2011-01-01 00:00:00'),
2: Timestamp('2011-01-01 00:00:00'),
3: Timestamp('2011-01-01 00:00:00'),
4: Timestamp('2011-01-02 00:00:00')},
'price': {0: 10.284260107718254,
1: 11.930300761831457,
2: 10.93741046217319,
3: 10.884574289565609,
4: 11.78005850418319},
'ticker': {0: 'aapl', 1: 'aapl', 2: 'aapl', 3: 'aapl', 4: 'aapl'}}
>>> pd.concat([stocks.head(), stocks.tail()], ignore_index=True).to_dict()
{'date': {0: Timestamp('2011-01-01 00:00:00'),
1: Timestamp('2011-01-01 00:00:00'),
2: Timestamp('2011-01-01 00:00:00'),
3: Timestamp('2011-01-01 00:00:00'),
4: Timestamp('2011-01-02 00:00:00'),
5: Timestamp('2011-01-24 00:00:00'),
6: Timestamp('2011-01-25 00:00:00'),
7: Timestamp('2011-01-25 00:00:00'),
8: Timestamp('2011-01-25 00:00:00'),
9: Timestamp('2011-01-25 00:00:00')},
'price': {0: 10.284260107718254,
1: 11.930300761831457,
2: 10.93741046217319,
3: 10.884574289565609,
4: 11.78005850418319,
5: 10.017209045035006,
6: 10.57090128181566,
7: 11.442792747870204,
8: 11.592953372130493,
9: 12.864146419530938},
'ticker': {0: 'aapl',
1: 'aapl',
2: 'aapl',
3: 'aapl',
4: 'aapl',
5: 'msft',
6: 'msft',
7: 'msft',
8: 'msft',
9: 'msft'}}
관련 열만 사용하여 DataFrame에 대한 설명을 제공 할 수도 있습니다. 이를 통해 다른 사람들이 각 열의 데이터 유형을 확인하고 다른 일반적인 오류 (예 : 날짜를 문자열 대 날짜 / 시간 64 대 개체)를 식별 할 수 있습니다.
stocks.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 100 entries, 0 to 99
Data columns (total 3 columns):
date 100 non-null datetime64[ns]
price 100 non-null float64
ticker 100 non-null object
dtypes: datetime64[ns](1), float64(1), object(1)
참고 : DataFrame에 다중 인덱스가있는 경우 :
DataFrame에 다중 색인이있는 경우을 호출하기 전에 먼저 재설정해야합니다 to_dict
. 그런 다음 다음을 사용하여 색인을 다시 작성해야합니다 set_index
.
# MultiIndex example. First create a MultiIndex DataFrame.
df = stocks.set_index(['date', 'ticker'])
>>> df
price
date ticker
2011-01-01 aapl 10.284260
aapl 11.930301
aapl 10.937410
aapl 10.884574
2011-01-02 aapl 11.780059
...
# After resetting the index and passing the DataFrame to `to_dict`, make sure to use
# `set_index` to restore the original MultiIndex. This DataFrame can then be restored.
d = df.reset_index().to_dict()
df_new = pd.DataFrame(d).set_index(['date', 'ticker'])
>>> df_new.head()
price
date ticker
2011-01-01 aapl 10.284260
aapl 11.930301
aapl 10.937410
aapl 10.884574
2011-01-02 aapl 11.780059