当我尝试更改失败的代码时,抛出以下警告但我得到了实际的预期结果。
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格式的索引而其他行是数字的,这样我的算术计算就不会受到影响。
任何帮助?
答案 0 :(得分:1)
如果需要将所有非数字值替换为NaN
,请使用apply
来处理df
中功能为to_numeric
的列,然后使用0
按fillna
排除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