用好這八條ChatGPT指令,高效完成Pandas任務
我們都聽說過ChatGPT。它不僅受到科技行業的關注,而且在更多廣泛的媒體上成為頭條新聞。
盡管有一些關于它在較簡單任務上的性能和可靠性的批評,但ChatGPT相比較于其他大型語言模型(LLM)在各種任務中表現都很出色,已經成為生產力的重要推動力。
將ChatGPT用于Pandas數據清洗和分析,可以大大提高生產力。本文將分享8個提示示例,介紹如何詢問ChatGPT以完成Pandas任務。
第一個提示:定義其角色
首先的提示要確定其作用:
提示:你是一名教我使用Pandas庫的Python導師。我將會問你如何使用Pandas執行特定任務,并期望你能向我解釋。同時,請在你的解釋中給我展示代碼。
在開始提問之前,我給出了DataFrame的結構,包括列名和數據類型。
第二個提示
提示:讓我先告訴你我所擁有的DataFrame的情況。然后,我將開始提問。以下是以Python字典形式給出的列名和數據類型。鍵表示列名,值表示數據類型。
{‘store’: dtype(‘O’), ‘product_group’: dtype(‘O’), ‘product_code’: dtype(‘int64’), ‘stock_qty’: dtype(‘int64’), ‘cost’: dtype(‘float64’), ‘price’: dtype(‘float64’), ‘last_week_sales’: dtype(‘int64’), ‘last_month_sales’: dtype(‘int64’)}
這里使用一個由模擬數據準備的樣本數據集。你可以從數據集庫repo中下載它(https://github.com/SonerYldrm/datasets)。它的名稱是sales_data_with_stores.csv。
以下是為你提供的DataFrame,供你參考:
DataFrame的前5行
現在我們可以開始進行Pandas任務了。
示例 1
提示:告訴我如何計算每個商店上周銷售額的平均值。
這是一個簡單的一行代碼,但如果你剛開始學習Pandas,可能仍然需要一些時間才能弄清楚。以下是ChatGPT給出的答案:
ChatGPT給出的測試代碼片段,復制粘貼如下所示。
# 導入pandas
import pandas as pd
# 假設'df'是你的DataFrame
average_sales = df.groupby('store')['last_week_sales'].mean()
ChatGPT還提供了有關代碼的執行方式和輸出類型的詳細解釋以及代碼。
示例 2
提示:告訴我如何找到每個商店上個月的總利潤。
對于這個任務,ChatGPT需要先弄清楚如何計算利潤。讓我們看看它的響應:
# 計算每個產品的利潤
df['last_month_profit'] = (df['price'] - df['cost']) * df['last_month_sales']
# 計算每個商店的總利潤
total_profit = df.groupby('store')['last_month_profit'].sum()
示例 3
在處理真實世界的數據時,我們經常會遇到缺失值的挑戰。測試ChatGPT如何處理不太直接的任務。
提示:庫存數量列中有一些缺失值。我想用該商店的平均庫存數量替換缺失值。告訴我如何完成這個任務。
# 計算每個商店的平均庫存數量
average_stock_qty_per_store = df.groupby('store')['stock_qty'].transform('mean')
# 用該商店的平均庫存數量替換'stock_qty'中的缺失值
df['stock_qty'].fillna(average_stock_qty_per_store, inplace=True)
有多種方法可以解決這個任務,使用transform函數是其中一種較為有效的方式。
transform函數很重要,使用transform函數來完成此任務的理由如下:
transform函數與apply函數類似,但與apply函數不同,transform函數可以返回與輸入大小相同的Series,這使得它在執行矢量化操作和廣播時非常有用,特別是與groupby對象一起使用時。
示例 4
提示:告訴我如何找到每個店鋪上個月銷量額最高的前三種產品。
# 首先,按'store'和'last_month_sales'對DataFrame進行排序
df_sorted = df.sort_values(['store', 'last_month_sales'], ascending=[True, False])
# 然后,按'store'分組,并使用apply方法選擇每個組的前3行
top_3_products = df_sorted.groupby('store').head(3)
它首先對整個DataFrame進行排序。我們也可以在每個組內進行排序。讓我們看看ChatGPT是否知道該如何做到這一點。
示例 5
提示:是否有另一種方法可以在不先對DataFrame進行排序的情況下完成此任務?
def top_3_products(group):
return group.nlargest(3, 'last_month_sales')
top_3_df = df.groupby('store').apply(top_3_products)
需要注意的是,首先對整個DataFrame進行排序可能是更高效的方法。此示例只是想觀察ChatGPT是否能提供不同的解決方案。
示例 6
提示:我想看到每個商店的上周表現與上月表現進行比較。
這是一個簡單的任務,但提示并沒有直接告訴ChatGPT如何完成。讓我們看看它的表現如何。
# 計算上周和上個月每個店的總銷售額
total_sales_last_week = df.groupby('store')['last_week_sales'].sum()
total_sales_last_month = df.groupby('store')['last_month_sales'].sum()
# 創建一個新的DataFrame來存儲這些信息
performance_df = pd.DataFrame({
'LastWeekSales': total_sales_last_week,
'LastMonthSales': total_sales_last_month,
})
# 計算從上個月到上周銷售額的變化
performance_df['SalesChange'] = performance_df['LastWeekSales'] - (performance_df['LastMonthSales'] / 4)
作為對上周與上月的表現相比較的反應,它找到了上周銷售額與上月銷售額四分之一之間存在差異,這是非常合理的。
它創建的DataFrame如下所示:
示例 7
提示:創建一個名為critical_stock的新列,如果stock_qty小于500,則取值為1,否則取值為0。
ChatGPT為這個任務給出了3個選項,以下是我更喜歡的兩個:
# 第一種選項
df['critical_stock'] = df['stock_qty'].apply(lambda x: 1 if x < 500 else 0)
# 第二種選項
import numpy as np
df['critical_stock'] = np.where(df['stock_qty'] < 500, 1, 0)
示例 8
提示:以大小、缺失值、數據類型和列統計信息的形式創建一個DataFrame的摘要。
用于總結DataFrame的函數和方法非常簡單,但ChatGPT在整理它們時做得非常好,排版整潔明了。
如下的是ChatGPT生成的代碼:
# 導入必要的庫
import pandas as pd
# DataFrame大小
print("DataFrame Size:")
print(df.shape)
print("\n")
# 缺失值
print("Missing Values:")
print(df.isnull().sum())
print("\n")
# 數據類型
print("Data Types:")
print(df.dtypes)
print("\n")
# 列統計信息
print("Column Statistics:")
print(df.describe(include='all'))
總結
以上示例展示了ChatGPT如何在數據分析中,尤其是在Pandas中,革命性地改變了常見任務的完成方式。它不僅提高效率,還豐富了我們對Pandas中可以完成的復雜操作的理解。