python - 如何使用 python pandas 替换列中的特定数字。

标签 python pandas dataframe conditional-statements str-replace

如何在不影响其他字符的情况下替换 pandas 数据框列中的特定数字?我有一个大的 csv 文件,类似于这样:

data = pd.read_csv("meter.csv")
data.head()
Out[10]:
     value  temp1  temp2
0   34 02:0   16.0     17 
1   36 06:0    8.0     27
2   28 10:0   18.0     21
3   34 02:0   16.0     17 
4   36 06:0    8.0     27
5   28 10:0   18.0     21
6   34 02:0   16.0     17 
7   36 06:0    8.0     27
8   28 10:0   18.0     21

如果 value.str[3:5] == 1000,我想替换 value 列值

我需要的输出:

     value  temp1  temp2
0   34 02:0   16.0     17 
1   36 06:0    8.0     27
2   28 00:0   18.0     21
3   34 02:0   16.0     17 
4   36 06:0    8.0     27
5   28 00:0   18.0     21
6   34 02:0   16.0     17 
7   36 06:0    8.0     27
8   28 00:0   18.0     21

我尝试使用 pd.str.replace 引用:pandas.Series.str.replace .但无法实现。

我的代码:data['value'] = data['value'].str[3:5].replace('10','00') 输出:

   value  temp1  temp2
0   02   16.0     17 
1   06    8.0     27
2   00   18.0     21
3   02   16.0     17 
4   06    8.0     27
5   00   18.0     21

它正在用新值替换整个值。谁能帮我解决这个问题。 谢谢!

最佳答案

data['value'].str[3:5].replace('10','00') 返回由每个字符串组成的 pd.Series[3:5] 切片,并在每一行中应用 replace 方法。您正在寻找的是返回整个字符串,并在符合您条件的每一行中应用 replace,这可以像这样实现:

import pandas as pd

data = pd.DataFrame({ # small part of your DF
    'value': ['34 02:0', '36 06:0', '28 10:0'], # Third row should be changed
    'temp1': [16.0, 8.0, 18.0],
    'temp2': [17, 27, 21] 
})

mask = data['value'].str[3:5] == '10'
data.loc[mask, 'value'] = data.loc[mask, 'value'].str.replace('10', '00')

>>> print(data)
     value  temp1  temp2
0  34 02:0   16.0     17
1  36 06:0    8.0     27
2  28 00:0   18.0     21 # Third row changes, yay!

如果有一个值多次匹配“10”,例如 10 10:0,则此代码可能会引入错误。您可以通过调用 .replace('10:', '00:') 来解决这个问题。

您也可以只使用正则表达式匹配 r'\s10\:' 并调用 .replace(re.compile(r'\s10\:'), ' 00 :').

import re

r = re.compile(r'\s10\:')
data['value'] = data['value'].str.replace(r, ' 00:', regex=True) # no need to define a condition at all

>>> print(data)
     value  temp1  temp2
0  34 02:0   16.0     17
1  36 06:0    8.0     27
2  28 00:0   18.0     21

对于您的情况,最后一个解决方案不如第一个解决方案明确。

关于python - 如何使用 python pandas 替换列中的特定数字。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51295980/

相关文章:

python - Python 中的 H 几何

python - 使用 Timegrouper '1M' 按列进行分组和求和会弄乱我的日期索引 pandas python

r - 当我使用函数创建 R data.frame 时,如何向 R data.frame 添加属性?

python - Pandas Dataframe - 值是列表

python - 导入 TensorFlow 会停止运行 python 程序

python - Wand 无法打开现有文件

python - 无论操作系统如何,都通过 python 安装 git python 库

python - Pandas :groupby 和可变权重

python - 在多级 DataFrame 上使用 pandas apply 函数

python - 打印时指定 Pandas DataFrame 列之间的空格数