我在Pandas
和/或NumPy
遇到了一些奇怪的举动,请你帮忙找出我的错误?
我从file读取数据,然后用np.nan
替换所有非数字元素,然后使用np.nanmin()
和np.nanmax()
计算最大值和最小值。这些值是nan
,尽管列中有一些浮点数。
我发现有两点:
1)当列的最后一个元素是float(以另一种方式,np.nanmin(df.iloc[:cnt_row,cnt_col])
指向float元素)时,如果我在交互模式下使用cnt_row - 1
得到最小值,则该函数返回一个正确的值值。但是如果在范围的末尾有nan
,则函数返回nan
,尽管以前的位置有浮点数。
2)当我将包含已替换文本值的DataFrame保存到新的csv文件并再次阅读时,np.nanmin
和nanmax
工作正常。
这是我使用的代码:
def is_digit(val):
if type(val) == str:
val = val.replace(',', '.')
try:
return not math.isnan(float(val))
except:
return False
path = "C:/test/deposits1.csv"
df = pd.read_csv(path, sep=';', header=0)
rows_num = len(df.iloc[:, 0])
cols_num = len(df.columns)
cnt_row = 0
cnt_col = 0
for cnt_col in range(cols_num):
# remove text from columns containing digits
for cnt_row in range(0, rows_num):
if not is_digit(df.iloc[cnt_row, cnt_col]):
df.iloc[cnt_row, cnt_col] = np.nan
else:
val = df.iloc[cnt_row, cnt_col]
if type(val) == str:
val = val.replace(',', '.')
df.iloc[cnt_row, cnt_col] = float(val)
min_val = None
max_val = None
try:
min_val = np.nanmin(df.iloc[:, cnt_col].values)
max_val = np.nanmax(df.iloc[:, cnt_col].values)
except: pass
Thnx提前!