我已經嘗試過所有關於該主題的解決方案,它們都不適用於數據幀「inplace」,乘法從未發生過。熊貓在位條件值乘法
所以這裏是我想要做的: 我有一個多級列數據幀與許多測量。每一列都被命令是這樣的:
數據:
MeasurementType
Value Unit Type
StudyNumber
1 1.0 m/s a
2 1.7 m/s v
3 10.5 cm/s b
我想所有的測量轉換,單位米/秒至釐米/秒,即我需要單位米/秒過濾所有值,將它們乘以10,然後更改單位列中的單位。
我管理過濾器,但是當我在它上面執行乘法(直接* 10,.mul(10),或者做一個新的賦值)時,它不會粘住。之後打印數據框顯示值沒有變化。
下面是代碼:
unit_df = data.iloc[:, data.columns.get_level_values(1)=='Unit']
unit_col_list = []
for unitcol in unit_df.columns:
unitget = unit_df[unitcol][unit_df[unitcol].notnull()].unique()
if unitget.size > 1:
unit_col_list.append(unitcol)
unit_col_list = [item[0] for item in unit_col_list] #so I get the header of the column
data_wrongunits = data[unit_col_list]
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']*=10
或
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value'].mul(10)
或
data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']=data_wrongunits[unit_col_list[0]][data_wrongunits[unit_col_list[0]]['Unit'] == 'm/s']['Value']*10
過濾器給了我一個系列的值列。也許另一個結構會有幫助?
做的[第一個答案]的內容(https://stackoverflow.com/questions/ 20625582 /如何處理與設置在熊貓copywarning)幫助?您訪問的元素看起來有問題。嘗試使用loc,並嘗試避免'df [] [] []'而不是'df.loc [conditions]' – Quickbeam2k1
我更新了我的評論,使用'loc'訪問項目並且不鏈接括號 – Quickbeam2k1
謝謝,實際上這解決了問題! @ Quickbeam2k1 – Moiraine24