我需要將大于 100 的值轉換為 0,但是,在我需要使該轉換具有 20 億個值的資料集中,這就是問題所在。我加快了很多時間來做到這一點......(我需要進行 5 次轉換)。
我使用帶有函式“.replace”的回圈。
那么,有任何其他功能或想法來解決這個問題嗎?
uj5u.com熱心網友回復:
您可以通過索引資料框的特定部分并為所有列或某些列設定值來讓熊貓為您處理它:這是一個基本資料框的示例。
import pandas as pd
df = pd.DataFrame({
'a': list(range(200)),
'b': list(range(200)),
})
df.loc[df['a'] > 100, 'a'] = 0
print(df['a'].unique())
df['b'].unique()
在這里,我們將列中a大于 100 的所有值替換為 0。最后兩個陳述句列印每個系列中的唯一值,只是為了顯示執行操作的結果。
如果您的意圖是修改匹配記錄的所有列,則可以省略指定列:df.loc[df['a'] > 100] = 0。
如果您想一次修改多個列,只需使用列名如下的陣列:df.loc[df['a'] > 100, ['a', 'b']] = 0.
不要忘記使用您的應用程式邏輯相應地更新條件。
uj5u.com熱心網友回復:
不完全確定你想做什么。您有單個陣列或表格資料嗎?如果是后者,您希望這適用于所有列還是僅適用于其中一些列?
無論如何,如果你只有一個陣列:
a = np.array([10,100,101,301,10,43])
a[a>100] = 0
print(a)
# --> [ 10 100 0 0 10 43]
如果您有資料框:
df = pd.DataFrame({'a':np.arange(30,120,10),
'b':np.arange(50,59),
'c':np.arange(95,104),
'd':np.arange(101,110)})
如果要應用于單個列:
df['a'][df['a'] > 100] = 0
如果要將其應用于多個列,一種方法是:
apply_to_cols = ['a','c']
def all_or_nothing(v):
if v > 100:
return 0
else:
return v
df[apply_to_cols] = np.vectorize(all_or_nothing)(df[apply_to_cols])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/439414.html
