python - 更改 Pandas 数据框中的值,但保留日期列

标签 python pandas dataframe replace

我的 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/

相关文章:

python - Pandas、groupby 和计数其他列中的数据

python - Python中的`goto`

python - 获取组内的最大值,但不仅仅是第一个(ex æquo 也是如此)

Python Dataframe 迭代行(比较它们之间的值)并准备一组作为输出

python-3.x - 如果所有值都等于 1,则在 pandas 中删除一列?

python - 如何获取dataframe的值?

python - 迭代行并从另一列获取值

重命名数据框中多个特定因素的水平

python - 使用 Python 拆分 Twitter RSS 字符串

python - 我知道 Perl 5。学习 Perl 6 而不是转向 Python 有什么好处?