【问题标题】:Changing values in Pandas dataframe, but keeping date column更改 Pandas 数据框中的值,但保留日期列
【发布时间】:2020-07-18 06:51:53
【问题描述】:

我在 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

【问题讨论】:

  • 您分享的数据不足以让我们尝试任何建议。不过你可以看看 pandas 的 clip 方法,看看是否有帮助

标签: python pandas dataframe replace


【解决方案1】:

仅将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)

【讨论】:

  • 非常感谢!我将代码归结为: hrt_data = pd.read_csv(hrtdata_file) cols = hrt_data.select_dtypes(np.number).columns hrt_data[cols] = hrt_data[cols].clip(0, 192) 它运行良好!
猜你喜欢
  • 1970-01-01
  • 2021-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-14
  • 1970-01-01
相关资源
最近更新 更多