我有一個我正在嘗試更正的電子表格。在計費分類中,應根據需要填寫“標準”或“非標準”。
我正在嘗試使用 numpy 的 where 函式來執行此操作:
df['Billing Categorization'] = np.where((df['Billing Categorization'].isnull(), ~df['AE Number'].isnull()), 'Standard', df['Billing Categorization'])
這個想法是計費分類中的空值應該用“標準”填充,其中在同一行中,“AE Number”列中的值不為空。
但是,我收到以下錯誤:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-64-863f807f354c> in <module>
30 df.loc[df["PQC-Product"].isnull(),'PQC-Product'] = df["Request-Product"]
31
---> 32 df['Billing Categorization'] = np.where((df['Billing Categorization'].isnull(), ~df['AE Number'].isnull()), 'Standard', df['Billing Categorization'])
33
34 #We simply get the data out
~\Anaconda3\lib\site-packages\pandas\core\frame.py in __setitem__(self, key, value)
3161 else:
3162 # set column
-> 3163 self._set_item(key, value)
3164
3165 def _setitem_slice(self, key: slice, value):
~\Anaconda3\lib\site-packages\pandas\core\frame.py in _set_item(self, key, value)
3240 """
3241 self._ensure_valid_index(value)
-> 3242 value = self._sanitize_column(key, value)
3243 NDFrame._set_item(self, key, value)
3244
~\Anaconda3\lib\site-packages\pandas\core\frame.py in _sanitize_column(self, key, value, broadcast)
3897
3898 # turn me into an ndarray
-> 3899 value = sanitize_index(value, self.index)
3900 if not isinstance(value, (np.ndarray, Index)):
3901 if isinstance(value, list) and len(value) > 0:
~\Anaconda3\lib\site-packages\pandas\core\internals\construction.py in sanitize_index(data, index)
749 """
750 if len(data) != len(index):
--> 751 raise ValueError(
752 "Length of values "
753 f"({len(data)}) "
ValueError: Length of values (2) does not match length of index (876)
兩列都有空值,但我只想填寫適用的值。顯然,并非所有這些都是可能的。我想從這個出發:
| 數字 | 計費分類 | 國家 | AE 編號 | AE 國家 | 日期 |
|---|---|---|---|---|---|
| 第一的 | 鈉 | 意大利 | 55568 | 意大利 | 2022 年 1 月 1 日 |
| 第二 | 鈉 | 法國 | 鈉 | 鈉 | 鈉 |
| 第三 | 標準 | 西班牙 | 85968 | 西班牙 | 2022 年 1 月 5 日 |
| 第四 | 非標準 | 英國 | 748265 | 英國 | 2022 年 1 月 5 日 |
| 第五 | 標準 | 英國 | 59632 | 英國 | 2022 年 1 月 6 日 |
| 第六 | 鈉 | 英國 | 78946 | 英國 | 22 年 1 月 7 日 |
對此:
| 數字 | 計費分類 | 國家 | AE 編號 | AE 國家 | 日期 |
|---|---|---|---|---|---|
| 第一的 | 標準 | 意大利 | 55568 | 意大利 | 2022 年 1 月 1 日 |
| 第二 | 鈉 | 法國 | 鈉 | 鈉 | 鈉 |
| 第三 | 標準 | 西班牙 | 85968 | 西班牙 | 2022 年 1 月 5 日 |
| 第四 | 非標準 | 英國 | 748265 | 英國 | 2022 年 1 月 5 日 |
| 第五 | 標準 | 英國 | 59632 | 英國 | 2022 年 1 月 6 日 |
| 第六 | 標準 | 英國 | 78946 | 英國 | 22 年 1 月 7 日 |
正如您在第二行看到的那樣,由于沒有 AE 編號,因此不應更改任何內容,因為它應該保持空白。我已經手動檢查了兩列的長度并且它們匹配,所以出了什么問題?
uj5u.com熱心網友回復:
IIUC 鏈式口罩由&:
m = df['Billing Categorization'].isna() & df['AE Number'].notna()
df['Billing Categorization'] = np.where(m, 'Standard', df['Billing Categorization'])
uj5u.com熱心網友回復:
您不需要np.where在這里,而是使用索引:
df[df['Billing Categorization'].isna() & df['AE Number'].notna()] = 'Standard'
輸出:
| 數字 | 計費分類 | 國家 | AE 編號 | AE 國家 | 日期 |
|---|---|---|---|---|---|
| 標準 | 標準 | 標準 | 標準 | 標準 | 標準 |
| 第二 | 楠 | 法國 | 楠 | 楠 | 楠 |
| 第三 | 標準 | 西班牙 | 85968 | 西班牙 | 2022 年 1 月 5 日 |
| 第四 | 非標準 | 英國 | 748265 | 英國 | 2022 年 1 月 5 日 |
| 第五 | 標準 | 英國 | 59632 | 英國 | 2022 年 1 月 6 日 |
| 標準 | 標準 | 標準 | 標準 | 標準 | 標準 |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443645.html
