ความท้าทายหนึ่งในแง่มุมที่ท้าทายที่สุดในการตอบคำถาม SO คือเวลาที่ใช้ในการสร้างปัญหาขึ้นใหม่ (รวมถึงข้อมูล) คำถามที่ไม่มีวิธีการที่ชัดเจนในการสร้างข้อมูลมีโอกาสน้อยที่จะตอบ เนื่องจากคุณใช้เวลาในการเขียนคำถามและมีปัญหาที่คุณต้องการความช่วยเหลือคุณสามารถช่วยตัวเองได้อย่างง่ายดายด้วยการให้ข้อมูลที่ผู้อื่นสามารถใช้เพื่อช่วยแก้ปัญหาของคุณ
คำแนะนำจาก @Andy สำหรับการเขียนคำถาม Pandas ที่ดีนั้นเป็นจุดเริ่มต้นที่ดีเยี่ยม สำหรับข้อมูลเพิ่มเติมอ้างถึงวิธีถามและวิธีสร้างตัวอย่างที่น้อยที่สุดสมบูรณ์และตรวจสอบได้
โปรดระบุคำถามของคุณอย่างชัดเจนล่วงหน้า   หลังจากสละเวลาในการเขียนคำถามของคุณและโค้ดตัวอย่างใด ๆ ลองอ่านและให้ 'บทสรุปผู้บริหาร' สำหรับผู้อ่านของคุณซึ่งสรุปปัญหาและระบุคำถามไว้อย่างชัดเจน
คำถามเดิม :
ฉันมีข้อมูลนี้ ...
ฉันต้องการทำสิ่งนี้ ...
ฉันต้องการให้ผลลัพธ์ของฉันมีลักษณะเช่นนี้ ...
อย่างไรก็ตามเมื่อฉันพยายามทำสิ่งนี้ฉันได้รับปัญหาต่อไปนี้ ...
ฉันพยายามค้นหาวิธีแก้ปัญหาด้วยการทำ [สิ่งนี้] และ [สิ่งนั้น]
ฉันจะแก้ไขได้อย่างไร
ขึ้นอยู่กับปริมาณของข้อมูลโค้ดตัวอย่างและสแต็คข้อผิดพลาดที่มีให้ผู้อ่านต้องไปไกลก่อนที่จะเข้าใจว่าปัญหาคืออะไร ลองทบทวนคำถามของคุณใหม่เพื่อให้คำถามนั้นอยู่ด้านบนสุดจากนั้นให้รายละเอียดที่จำเป็น
คำถามที่มีการแก้ไข :
Qustion:   ฉันจะทำ [สิ่งนี้] ได้อย่างไร?
ฉันพยายามค้นหาวิธีแก้ปัญหาด้วยการทำ [สิ่งนี้] และ [สิ่งนั้น]
เมื่อฉันพยายามทำสิ่งนี้ฉันได้รับปัญหาต่อไปนี้ ...
ฉันต้องการให้ผลลัพธ์สุดท้ายของฉันมีลักษณะเช่นนี้ ...
นี่คือรหัสขั้นต่ำที่สามารถทำให้เกิดปัญหาของฉันได้ ...
และนี่คือวิธีการสร้างข้อมูลตัวอย่างของฉันใหม่:
df = pd.DataFrame({'A': [...], 'B': [...], ...})
ให้ข้อมูลตัวอย่างถ้าจำเป็น !!!
บางครั้งเพียงแค่หัวหรือส่วนท้ายของ DataFrame เป็นสิ่งที่จำเป็น คุณยังสามารถใช้วิธีการที่เสนอโดย @JohnE เพื่อสร้างชุดข้อมูลขนาดใหญ่ที่คนอื่นสามารถทำซ้ำได้ ใช้ตัวอย่างของเขาเพื่อสร้าง DataFrame 100 แถวของราคาหุ้น:
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) })
หากนี่เป็นข้อมูลจริงของคุณคุณอาจต้องการรวมส่วนหัวและ / หรือส่วนท้ายของ dataframe ดังต่อไปนี้ (อย่าลืมเปิดเผยชื่อที่ละเอียดอ่อนของข้อมูลที่สำคัญ):
>>> 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 ของคุณมี MultiIndex:
หากคุณมี DataFrame multiindex 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