Виклик Одним із найскладніших аспектів відповіді на питання ЗО є час, необхідний для відновлення проблеми (включаючи дані). На запитання, які не мають чіткого способу відтворення даних, менше шансів відповісти. Зважаючи на те, що ви витрачаєте час, щоб написати запитання, і у вас є питання, з яким ви хочете допомогти, ви можете легко допомогти собі, надавши дані, які потім можуть використовувати інші, щоб вирішити вашу проблему.
Інструкції, надані @Andy для написання гарних запитань щодо Pandas - це чудове місце для початку. Для отримання додаткової інформації див. Запитання та створення мінімальних, повних та перевірених прикладів .
Будь ласка, чітко сформулюйте своє запитання наперед. Виділивши час, щоб написати своє запитання та будь-який зразок коду, спробуйте його прочитати та надайте для свого читача «Резюме», який узагальнює проблему та чітко заявляє питання.
Оригінальне запитання :
У мене є ці дані ...
Я хочу це зробити ...
Я хочу, щоб мій результат виглядав так ...
Однак, коли я намагаюся зробити [це], у мене виникає така проблема ...
Я намагався знайти рішення, зробивши [це] та [це].
Як це виправити?
Залежно від кількості даних, зразкового коду та наборів помилок, читачеві потрібно пройти довгий шлях, перш ніж зрозуміти, у чому проблема. Спробуйте перевстановити своє запитання, щоб воно було зверху, а потім вкажіть необхідні деталі.
Переглянуте питання :
Питання: Як я можу зробити це [це]?
Я намагався знайти рішення, зробивши [це] та [це].
Коли я намагаюся зробити [це], у мене виникає така проблема ...
Я хотів би, щоб мої кінцеві результати виглядали так ...
Ось мінімальний код, який може відтворити мою проблему ...
Ось як відтворити мої вибіркові дані:
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 (використовуючи лише відповідні стовпці). Це полегшує іншим перевірити типи даних кожного стовпця та виявити інші поширені помилки (наприклад, дати як рядок проти datetime64 та об’єкт):
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 є MultiIndex:
Якщо у вашій 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