pandas 类型错误:不能将序列乘以“float”类型的非整数(python 2.7)
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/39708133/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
TypeError: can't multiply sequence by non-int of type 'float' (python 2.7)
提问by Andreuccio
I have a dataframe t_unit
, which is the result of a pd.read_csv()
function.
我有一个 dataframe t_unit
,它是一个pd.read_csv()
函数的结果。
datetime B18_LR_T B18_B1_T
24/03/2016 09:00 21.274 21.179
24/03/2016 10:00 19.987 19.868
24/03/2016 11:00 21.632 21.417
24/03/2016 12:00 26.285 24.779
24/03/2016 13:00 26.897 24.779
I am resampling the dataframe to calculate the 5th and 05th percentiles with the code:
我正在重新采样数据框以使用代码计算第 5 个和第 5 个百分位数:
keys_actual = list(t_unit.columns.values)
for key in keys_actual:
ts_wk = t_unit[key].resample('W-MON')
ts_wk_05p = ts_wk.apply(lambda x: x.quantile(0.05)).round(decimals=1).rename(key+'_05p', inplace=True)
ts_wk_95p = ts_wk.apply(lambda x: x.quantile(0.95)).round(decimals=1).rename(key+'_95p', inplace=True)
All works fine, but when I add a column to my dataframe, by means of pd.concat
, into:
一切正常,但是当我将一列添加到我的数据框中时,通过pd.concat
, 进入:
datetime B18_LR_T B18_B1_T ext_T
24/03/2016 09:00 21.274 21.179 6.9
24/03/2016 10:00 19.987 19.868 7.5
24/03/2016 11:00 21.632 21.417 9.1
24/03/2016 12:00 26.285 24.779 9.9
24/03/2016 13:00 26.897 24.779 9.2
ts_wk_05p = ts_wk.apply(lambda x: x.quantile(0.05)).round(decimals=1).rename(key+'_05p', inplace=True)
TypeError: can't multiply sequence by non-int of type 'float'
ts_wk_05p = ts_wk.apply(lambda x: x.quantile(0.05)).round(decimals=1).rename(key+'_05p', inplace=True)
类型错误:不能将序列乘以“float”类型的非整数
Do you have any idea why?
你知道为什么吗?
回答by jezrael
There is problem some column is not numeric.
You can check dtypes
:
有一些列不是数字的问题。您可以检查dtypes
:
print (t_unit.dtypes)
B18_LR_T float64
B18_B1_T float64
ext_T object
dtype: object
Then try convert to numeric first by astype
:
然后尝试首先通过astype
以下方式转换为数字:
t_unit.ext_T = t_unit.ext_T.astype(float)
If:
如果:
ValueError: could not convert string to float
ValueError:无法将字符串转换为浮点数
then use to_numeric
with parameter errors='coerce'
for convert bad data to NaN
:
然后使用to_numeric
with 参数errors='coerce'
将坏数据转换为NaN
:
t_unit.ext_T = pd.to_numeric(t_unit.ext_T, errors='coerce')
All code:
所有代码:
#simulate string column
t_unit.ext_T = t_unit.ext_T.astype(str)
print (t_unit.dtypes)
B18_LR_T float64
B18_B1_T float64
ext_T object
dtype: object
#convert to float
t_unit.ext_T = t_unit.ext_T.astype(float)
print (t_unit)
L = []
for key in t_unit.columns:
ts_wk = t_unit[key].resample('W-MON')
#remove inplace=True
ts_wk_05p = ts_wk.apply(lambda x: x.quantile(0.05)).round(decimals=1).rename(key+'_05p')
ts_wk_95p = ts_wk.apply(lambda x: x.quantile(0.95)).round(decimals=1).rename(key+'_95p')
L.append(ts_wk_05p)
L.append(ts_wk_95p)
print (pd.concat(L, axis=1))
B18_LR_T_05p B18_LR_T_95p B18_B1_T_05p B18_B1_T_95p ext_T_05p \
datetime
2016-03-28 20.2 26.8 20.1 24.8 7.0
ext_T_95p
datetime
2016-03-28 9.8