我正在嘗試根據串列中的值過濾資料框中的列,這是我出錯的代碼片段(為簡單起見替換了值)
import pandas as pd
from pandas import Series
df['Campaign']=df['Location']
campaign_list = ['a', 'b']
df['Campaign']=df[df['Campaign'].isin(campaign_list)]
這是問題代碼之前資料框的外觀示例
Location Billed Amount TransactionID Campaign
a Na x a
b Na y b
c Na z c
d Na xx d
e Na xy e
f Na xz f
這是我想要的 df 應該是什么樣子
Location Billed Amount TransactionID Campaign
a NaN x a
b NaN y b
c NaN z NaN
d NaN xx NaN
e NaN xy NaN
f NaN xz NaN
這是我收到的錯誤,這很奇怪,因為我昨天運行了這個確切的代碼并且沒有任何問題。這里有什么明顯的東西我沒有看到嗎?
~\anaconda3\lib\site-packages\pandas\core\frame.py in __setitem__(self, key, value)
3600 self._setitem_array(key, value)
3601 elif isinstance(value, DataFrame):
-> 3602 self._set_item_frame_value(key, value)
3603 elif (
3604 is_list_like(value)
~\anaconda3\lib\site-packages\pandas\core\frame.py in _set_item_frame_value(self, key, value)
3727 len_cols = 1 if is_scalar(cols) else len(cols)
3728 if len_cols != len(value.columns):
-> 3729 raise ValueError("Columns must be same length as key")
3730
3731 # align right-hand-side columns if self.columns
ValueError: Columns must be same length as key
uj5u.com熱心網友回復:
用 Series.where
df['Campaign'] = df['Campaign'].where(lambda camp: camp.isin(campaign_list))
或者
df['Campaign'] = df['Campaign'].where(df['Campaign'].isin(campaign_list))
輸出:
>>> df
Location Billed Amount TransactionID Campaign
0 0 Na x a
1 1 Na y b
2 2 Na z NaN
3 3 Na xx NaN
4 4 Na xy NaN
5 5 Na xz NaN
uj5u.com熱心網友回復:
這應該有效:
df=df[df['Campaign'].isin(campaign_list)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360931.html
