我的 pandas 数据框中有一个包含 7 列和 2557 行的数据集。
Date Inlet 1 Inlet 2 Inlet 3 Inlet 4 Inlet 5 Inlet 6
01-01-13 0.40 0.41 0.36 10.39 0.37 0.47
02-01-13 -15 0.56 71.90 250.98 90.67 40.89
...
我试图用 0 替换所有负值,用 192 替换所有高于 192 的值。我已经成功了,但是我得到的新数据帧缺少第一行(日期)。我猜它被遗漏了,因为它不被视为数值?如何获取包含更正数据的新数据框并仍然保留日期列?
我已经尝试过这个问题的答案:How to replace negative numbers in Pandas Data Frame by zero
并编写了以下代码:
hrt_data = pd.read_csv(hrtdata_file)
num_hrt = hrt_data._get_numeric_data()
num_hrt[num_hrt < 0] = 0
num_hrt[num_hrt > 192] = 192
最佳答案
使用DataFrame.select_dtypes
仅适用于数字数据,然后使用 DataFrame.clip
仅分配回数字列:
print (df)
Date Inlet 1 Inlet 2 Inlet 3 Inlet 4 Inlet 5 col
0 01-01-13 -0.4 500.41 0.36 0.39 0.37 string1
df1 = df.select_dtypes(np.number)
df[df1.columns] = df1.clip(0, 192)
print (df)
Date Inlet 1 Inlet 2 Inlet 3 Inlet 4 Inlet 5 col
0 01-01-13 0.0 192.0 0.36 0.39 0.37 string1
提取数字列名称的解决方案,谢谢@yatu:
cols = df.select_dtypes(np.number).columns
df[cols] = df[cols].clip(0, 192)
关于python - 更改 Pandas 数据框中的值,但保留日期列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61057001/