Thách thức Một trong những khía cạnh thách thức nhất của việc trả lời các câu hỏi SO là thời gian cần thiết để tạo lại vấn đề (bao gồm cả dữ liệu). Những câu hỏi không có cách rõ ràng để tái tạo dữ liệu ít có khả năng được trả lời. Cho rằng bạn đang dành thời gian để viết câu hỏi và bạn có một vấn đề mà bạn muốn trợ giúp, bạn có thể dễ dàng tự giúp mình bằng cách cung cấp dữ liệu mà người khác có thể sử dụng để giúp giải quyết vấn đề của bạn.
Các hướng dẫn được cung cấp bởi @Andy để viết các câu hỏi Pandas tốt là một nơi tuyệt vời để bắt đầu. Để biết thêm thông tin, hãy tham khảo cách hỏi và cách tạo các ví dụ Tối thiểu, Hoàn chỉnh và Có thể kiểm chứng .
Vui lòng nêu rõ câu hỏi của bạn trả trước. Sau khi dành thời gian để viết câu hỏi của bạn và bất kỳ mã mẫu nào, hãy thử đọc nó và cung cấp một 'Tóm tắt điều hành' cho người đọc của bạn để tóm tắt vấn đề và nêu rõ câu hỏi.
Câu hỏi gốc :
Tôi có dữ liệu này ...
Tôi muốn làm điều này...
Tôi muốn kết quả của mình giống như thế này ...
Tuy nhiên, khi tôi cố gắng thực hiện [điều này], tôi gặp vấn đề sau ...
Tôi đã cố gắng tìm giải pháp bằng cách thực hiện [điều này] và [điều đó].
Làm thế nào để tôi sửa chữa nó?
Tùy thuộc vào lượng dữ liệu, mã mẫu và ngăn xếp lỗi được cung cấp, người đọc cần phải đi một chặng đường dài trước khi hiểu vấn đề là gì. Hãy thử đặt lại câu hỏi của bạn để câu hỏi được đặt lên hàng đầu, sau đó cung cấp các chi tiết cần thiết.
Câu hỏi sửa đổi :
Hỏi: Làm thế nào tôi có thể làm [điều này]?
Tôi đã cố gắng tìm giải pháp bằng cách thực hiện [điều này] và [điều đó].
Khi tôi cố gắng thực hiện [điều này], tôi gặp vấn đề sau ...
Tôi muốn kết quả cuối cùng của mình giống như thế này ...
Đây là một số mã tối thiểu có thể tái tạo vấn đề của tôi ...
Và đây là cách tạo lại dữ liệu mẫu của tôi:
df = pd.DataFrame({'A': [...], 'B': [...], ...})
CUNG CẤP DỮ LIỆU MẪU NẾU CẦN !!!
Đôi khi chỉ cần phần đầu hoặc phần đuôi của DataFrame là tất cả những gì cần thiết. Bạn cũng có thể sử dụng các phương pháp được đề xuất bởi @JohnE để tạo các bộ dữ liệu lớn hơn có thể được sao chép bởi những người khác. Sử dụng ví dụ của anh ấy để tạo DataFrame 100 hàng giá cổ phiếu:
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) })
Nếu đây là dữ liệu thực tế của bạn, bạn có thể chỉ muốn bao gồm phần đầu và / hoặc phần đuôi của khung dữ liệu như sau (hãy chắc chắn ẩn danh bất kỳ dữ liệu nhạy cảm nào):
>>> 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'}}
Bạn cũng có thể muốn cung cấp một mô tả về DataFrame (chỉ sử dụng các cột có liên quan). Điều này giúp người khác dễ dàng kiểm tra các loại dữ liệu của từng cột và xác định các lỗi phổ biến khác (ví dụ: ngày như chuỗi so với datetime64 so với đối tượng):
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)
LƯU Ý: Nếu DataFrame của bạn có Đa chỉ số:
Nếu DataFrame của bạn có multiindex, trước tiên bạn phải đặt lại trước khi gọi to_dict
. Sau đó, bạn cần tạo lại chỉ mục bằng cách sử dụng 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