Reputation: 954
My task is to convert columns dcpower
and acpower
(whichever is applicable) from kW to watt if their current units is kW. My data contain nan
but I don't want to remove them. Below is my script.
if powerunit == 'watt':
pass
if powerunit == 'kW':
if 'dcpower' in df.columns:
df['dcpower'] = (df['dcpower'] * 1000.0).copy()
else:
pass
if 'acpower' in df.columns:
df['acpower'] = (df['acpower'] * 1000.0).copy()
else:
pass
The script works, but it returns SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead
...
# This is added back by InteractiveShellApp.init_path()
By adding df.loc['power']
or df.iloc['power']
and .copy()
at the end, it does not work in my machine.
df["dcpower"] = (df.iloc["dcpower"] * 1000.0, "dcpower").copy()
returns Cannot index by location index with a non-integer key
.
Sample data
Iac power wind Tamb RH ghi dhi WDir rain
Timestamp
2019-04-02 17:35:00 3.62 0.84 nan 27.82 nan 194.10 33.56 28.52 nan
2019-04-02 17:40:00 3.04 0.69 nan 27.59 nan 152.22 35.96 28.58 nan
2019-04-02 17:45:00 2.51 0.54 nan 27.52 nan 112.86 34.04 28.78 nan
2019-04-02 17:50:00 2.11 0.40 nan 27.43 nan nan 34.51 29.00 nan
2019-04-02 17:55:00 1.86 nan nan 27.32 nan nan 30.63 29.10 nan
Any help is appreciated.
Edit:
Python: 3.7.4
JupyterLab: 1.1.4
Upvotes: 0
Views: 59
Reputation: 863291
For me your code working very nice with no error:
df = pd.DataFrame({
'dcpower':[4,5,4,5,5,4],
'acpower':[7,8,9,4,2,3],
})
powerunit = 'kW'
if powerunit == 'kW':
if 'dcpower' in df.columns:
df['dcpower'] = (df['dcpower'] * 1000.0)
else:
pass
if 'acpower' in df.columns:
df['acpower'] = (df['acpower'] * 1000.0)
else:
pass
print (df)
dcpower acpower
0 4000.0 7000.0
1 5000.0 8000.0
2 4000.0 9000.0
3 5000.0 4000.0
4 5000.0 2000.0
5 4000.0 3000.0
Upvotes: 1