我四处走动,尝试了很多不同的方式,所以我猜我的核心理解是错误的。我将非常感谢您帮助理解我的编码/解码问题。
我从SQL导入数据框,似乎有些数据类型:float64被转换为Object。因此,我无法做任何计算。我无法将Object转换回float64。
df.head()
Date WD Manpower 2nd CTR 2ndU T1 T2 T3 T4
2013/4/6 6 NaN 2,645 5.27% 0.29 407 533 454 368
2013/4/7 7 NaN 2,118 5.89% 0.31 257 659 583 369
2013/4/13 6 NaN 2,470 5.38% 0.29 354 531 473 383
2013/4/14 7 NaN 2,033 6.77% 0.37 396 748 681 458
2013/4/20 6 NaN 2,690 5.38% 0.29 361 528 541 381
df.dtypes
WD float64
Manpower float64
2nd object
CTR object
2ndU float64
T1 object
T2 object
T3 object
T4 object
T5 object
dtype: object
SQL表:
答案 0 :(得分:19)
您只需拨打convert_objects
:
In [36]:
df = df.convert_objects(convert_numeric=True)
df.dtypes
Out[36]:
Date object
WD int64
Manpower float64
2nd object
CTR object
2ndU float64
T1 int64
T2 int64
T3 int64
T4 float64
dtype: object
对于第二列和“点击率”列,我们可以调用向量化str
方法来替换千位分隔符并删除'%'符号,然后astype
进行转换:
In [39]:
df['2nd'] = df['2nd'].str.replace(',','').astype(int)
df['CTR'] = df['CTR'].str.replace('%','').astype(np.float64)
df.dtypes
Out[39]:
Date object
WD int64
Manpower float64
2nd int32
CTR float64
2ndU float64
T1 int64
T2 int64
T3 int64
T4 object
dtype: object
In [40]:
df.head()
Out[40]:
Date WD Manpower 2nd CTR 2ndU T1 T2 T3 T4
0 2013/4/6 6 NaN 2645 5.27 0.29 407 533 454 368
1 2013/4/7 7 NaN 2118 5.89 0.31 257 659 583 369
2 2013/4/13 6 NaN 2470 5.38 0.29 354 531 473 383
3 2013/4/14 7 NaN 2033 6.77 0.37 396 748 681 458
4 2013/4/20 6 NaN 2690 5.38 0.29 361 528 541 381
或者您可以在不调用astype
的情况下执行上述字符串处理操作,然后调用convert_objects
一次性转换所有内容。
<强>更新强>
由于版本0.17.0
convert_objects
已弃用且没有顶级功能,因此您需要这样做:
df.apply(lambda col:pd.to_numeric(col, errors='coerce'))
答案 1 :(得分:4)
我在从具有多个内部标题行的Excel工作表创建的DataFrame(df
)中遇到此问题。
清除df
的内部标题行后,列&#39;值是&#34;非空对象&#34;输入(DataFrame.info()
)。
此代码将多列的所有数值转换为int64和float64:
for i in range(0, len(df.columns)):
df.iloc[:,i] = pd.to_numeric(df.iloc[:,i], errors='ignore')
# errors='ignore' lets strings remain as 'non-null objects'
答案 2 :(得分:3)
答案 3 :(得分:0)
你可以试试这个:
df['2nd'] = pd.to_numeric(df['2nd'].str.replace(',', ''))
df['CTR'] = pd.to_numeric(df['CTR'].str.replace('%', ''))
答案 4 :(得分:0)
或者您可以使用正则表达式来处理多个项目,作为此问题的一般情况,
df['2nd'] = pd.to_numeric(df['2nd'].str.replace(r'[,.%]',''))
df['CTR'] = pd.to_numeric(df['CTR'].str.replace(r'[^\d%]',''))
答案 5 :(得分:0)
X = np.array(X, dtype=float)
您可以使用它在python 3.7.6中转换为float数组