python弃用pd.convert_objects(convert_numeric = True)可以解决另一个故障

时间:2018-01-05 10:27:40

标签: python pandas dataframe

当我尝试更改失败的代码时,抛出以下警告但我得到了实际的预期结果。

new_table = new_table.convert_objects(convert_numeric=True)
new_table=new_table.replace(np.nan,0)  # This is used to make - to 0 for calc

警告(来自警告模块): new_table = new_table.convert_objects(convert_numeric = True) FutureWarning:不推荐使用convert_objects。使用特定于数据类型的转换器pd.to_datetime,pd.to_timedelta和pd.to_numeric。

new_table只是它包含的pandas数据帧

A    B   C  D  E
1    -   3  5  6
2    3   5  6  7
-    -   5  5  5
5    4   -  -  -
-    -   4  -  4
9    -   -  10 23

在这个给定的数据帧格式中,因为我们有字符串“ - ”如果我使用下面的方法,则进一步的sum或diff或乘法逻辑会引发错误。

new_table = pd.to_numeric(new_table)
#new_table=new_table.replace("-",0)
new_table=new_table.replace(np.nan,0)

追踪(最近一次通话):   文件行107,in     new_table = pd.to_numeric(new_table)   文件行113,在to_numeric中     提出TypeError('arg必须是列表,元组,1-d数组或系列') TypeError:arg必须是list,tuple,1-d数组或Series

处理这种情况的最佳方法是,第一行应该是str格式的索引而其他行是数字的,这样我的算术计算就不会受到影响。

任何帮助?

1 个答案:

答案 0 :(得分:1)

如果需要将所有非数字值替换为NaN,请使用apply来处理df中功能为to_numeric的列,然后使用0fillna排除astype之前int的所有值:

new_table1 = new_table.apply(pd.to_numeric, errors='coerce').fillna(0).astype(int)
print (new_table1)
   A  B  C   D   E
0  1  0  3   5   6
1  2  3  5   6   7
2  0  0  5   5   5
3  5  4  0   0   0
4  0  0  4   0   4
5  9  0  0  10  23

print (new_table1.dtypes)
A    int32
B    int32
C    int32
D    int32
E    int32
dtype: object

Anoter解决方案,如果所有值都是整数,则replace所有非数字+ astype

new_table2 = new_table.replace('\D+', 0, regex=True).astype(int)
print (new_table2)
   A  B  C   D   E
0  1  0  3   5   6
1  2  3  5   6   7
2  0  0  5   5   5
3  5  4  0   0   0
4  0  0  4   0   4
5  9  0  0  10  23

print (new_table2.dtypes)
A    int32
B    int32
C    int32
D    int32
E    int32
dtype: object

如果所有值都只是-,那么解决方案就是简化:

new_table3 = new_table.replace('-', 0, regex=True).astype(int)
print (new_table3)
   A  B  C   D   E
0  1  0  3   5   6
1  2  3  5   6   7
2  0  0  5   5   5
3  5  4  0   0   0
4  0  0  4   0   4
5  9  0  0  10  23

print (new_table3.dtypes)
A    int32
B    int32
C    int32
D    int32
E    int32
dtype: object