我试图找到一个解决方案,将 Dataframe 中的负数替换为0,在堆栈溢出(How to replace negative numbers in Pandas Data Frame by zero)中有一些建议。但大多数建议都是在 Dataframe 中只有一种数据类型的假设下工作的,比如float,所以当 Dataframe 中有字符和日期数据类型沿着float时,它就不起作用了。
是否可以只替换浮点/数字列,忽略日期类型,并将小于0的值替换为0?
有什么建议吗?
我正在使用的数据框如下所示:
{'ds': {'XYZ-100742': Timestamp('2023-01-01 00:00:00')}, 'X1': {'XYZ-100742': 101.0}, 'X2': {'XYZ-100742': 35.0}, 'X3': {'XYZ-100742': 33.0}, 'X4': {'XYZ-100742': 100.0}, 'X5': {'XYZ-100742': 101.0}, 'X6': {'XYZ-100742': 94.0}, 'X7': {'XYZ-100742': 116.0}, 'X8': {'XYZ-100742': 129.0}, 'X9': {'XYZ-100742': 108.0}, 'X10': {'XYZ-100742': -82.0}, 'X11': {'XYZ-100742': 47.0}, 'X12': {'XYZ-100742': 150.0}, 'X13': {'XYZ-100742': 129.0}, 'X14': {'XYZ-100742': 84.0}, 'X15': {'XYZ-100742': 48.0}, 'X16': {'XYZ-100742': -62.0}, 'X17': {'XYZ-100742': 150.0}, 'X18': {'XYZ-100742': -9.0}}
我写的代码,以解决这个问题如下:
import numpy as np
import pandas as pd
df = pd.read_excel ('C:/X/X/X/Book1.xlsx')
df[df<0]=0
这遇到了一个错误。我假设这是因为 Dataframe 中的数据类型不同。附件是错误:
**TypeError: '<' not supported between instances of 'str' and 'int'**
1条答案
按热度按时间flvlnr441#
将
DataFrame.clip
与DataFrame.select_dtypes
一起用于数值列:备选方案:
或者使用
DataFrame.mask
:编辑: