[英]Creating a dummy variable in Pandas without making copies
我想在Pandas中創建一個虛擬變量,如果文本的5列中的任何一列包含特定字符串,則其值均為1。 我正在使用以下代碼:
df[a]=np.where((df['col1']==string) | (df['col2']==string) | (df['col3']==string) | (df['col4']==string) | (df['col5']==string),1,0)
這很好用,但是占用大量內存。 我在一個龐大的數據集上執行了大約一千次,但是大小應該不是難以控制的-它大約要開始一個演出(大約一百萬行)。
在我看來,上面的代碼必須以某種方式創建副本,因為我的計算機上的內存使用量增長到80 gig(真實和虛擬),這會引起問題。 有沒有更有效的方法可以做到這一點?
這是您可以迭代執行的方法。 通常,我們會嘗試避免迭代,但是在完整向量操作占用過多內存的情況下,值得采取一些步驟。 在處理不容易向量化的結構字段時尤其如此。
I = np.zeros(df.shape, bool)
for name, val in zip(df.dtype.names, [string1, string2, string3, ...]):
I |= (df[name]==val)
一種更快的方法是使用np.any
並僅測試整個df(或通過將列名稱列表傳遞給df的子集來測試子集):
In [27]:
t=['hellos','python']
df = pd.DataFrame({'a':t, 'b':t, 'c':['hello', 'yes']})
df
Out[27]:
a b c
0 hellos hellos hello
1 python python yes
In [28]:
np.any(df=='hello')
Out[28]:
True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.