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