我有一個 csv 檔案,我需要根據其他 2 個值更改一些值。通常我會使用 if 陳述句,但我們都知道 pandas 并不容易做到這一點。
但是我現在如何Cat_Tier_2僅根據該線路描述中的無線或有線一詞更改為無線或有線等?
Name x brand mouse
Description I am a wireless mouse
Cat_Tier_1 Peripherals
Cat_Tier_2 Mouse
所以我可以Cat_Tier_1通過
df["Cat_Tier_1"] = df["Cat_Tier_1"].str.replace("Peripherals", "Mouse")
使用熊貓我不能使用好的舊if陳述句,例如
if "wireless" in df["Description"]:
df["Cat_Tier_2"].str.replace("Mouse", "Wireless")
elif "corded" in df["Description"]:
df["Cat_Tier_2"].str.replace("Mouse", "Corded")
else:
pass
uj5u.com熱心網友回復:
這將滿足您的問題:
df.loc[df.Description.str.contains('wireless'), 'Cat_Tier_2'] = 'wireless'
df.loc[df.Description.str.contains('corded'), 'Cat_Tier_2'] = 'corded'
輸入:
Name Description Cat_Tier_1 Cat_Tier_2
0 x brand mouse I am a wireless mouse Peripherals Mouse
輸出:
Name Description Cat_Tier_1 Cat_Tier_2
0 x brand mouse I am a wireless mouse Peripherals wireless
uj5u.com熱心網友回復:
如果需要替換子字串,則Series.str.contains用于僅按條件過濾匹配的行:DataFrame.loc
m1 = df["Description"].str.contains('wireless')
m2 = df["Description"].str.contains('corded')
df.loc[m1, "Cat_Tier_2"] = df.loc[m1, "Cat_Tier_2"].str.replace("Mouse", "Wireless")
df.loc[m2, "Cat_Tier_2"] = df.loc[m2, "Cat_Tier_2"].str.replace("Mouse", "Corded")
uj5u.com熱心網友回復:
有多種方法可以解決這個問題。
如果您仍然想使用 if-else 或者將來您想構建復雜的邏輯以應用于列,其中一種方法是 pandas apply,您可以在其中傳遞要應用的列和函式,例如:
def func(value):
new_val = None
if "wireless" in value:
new_val = value.replace("Mouse", "Wireless")
elif "corded" in value:
new_val = value.replace("Mouse", "Corded")
else:
new_val = value
return new_val
df['Cat_Tier_2'] = df['Description'].apply(func)
但如果你有非常復雜的邏輯,你需要這個。這個問題可以用一個更簡單的方法來解決,loc比如 jezrael 假設的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/486686.html
標籤:Python python-3.x 熊猫 CSV
