Pandas - 替换列值

时间:2015-08-08 01:58:05

标签: python pandas

我知道这个问题有很多主题,但这些方法都没有对我有用,所以我发布了我的具体情况

我有一个如下所示的数据框:

data = pd.DataFrame([[1,0],[0,1],[1,0],[0,1]], columns=["sex", "split"])
data['sex'].replace(0, 'Female')
data['sex'].replace(1, 'Male')
data

我想要做的是用“'女性”替换性别栏中的所有0,使用“男性'”替换所有1'当我使用上面的代码

时,数据框内似乎没有变化

我是否错误地使用了replace()?或者有更好的方法来有条件地替换值吗?

3 个答案:

答案 0 :(得分:42)

是的,您使用不当,Series.replace()默认情况下不是就地操作,它会返回替换的数据框/系列,您需要将其分配回dataFrame / Series才能发生效果。或者,如果您需要在原地进行,则需要将data['sex'].replace(0, 'Female',inplace=True) data['sex'].replace(1, 'Male',inplace=True) 关键字参数指定为replace示例 -

list

此外,您可以使用to_replacevalue参数以及data['sex'].replace([0,1],['Female','Male'],inplace=True) 参数,将上述内容合并为一个In [10]: data = pd.DataFrame([[1,0],[0,1],[1,0],[0,1]], columns=["sex", "split"]) In [11]: data['sex'].replace([0,1],['Female','Male'],inplace=True) In [12]: data Out[12]: sex split 0 Male 0 1 Female 1 2 Male 0 3 Female 1 函数调用,示例 -

In [15]: data = pd.DataFrame([[1,0],[0,1],[1,0],[0,1]], columns=["sex", "split"])

In [16]: data['sex'].replace({0:'Female',1:'Male'},inplace=True)

In [17]: data
Out[17]:
      sex  split
0    Male      0
1  Female      1
2    Male      0
3  Female      1

示例/演示 -

 \s\w+:(|\"|\')\w+\1\s?

您还可以使用字典,示例 -

preg_replace( '/\s\w+:(|\"|\')\w+\1/', '', 'I like to ride a camel tag:videos tag:nope country:"none"');

答案 1 :(得分:5)

您还可以尝试apply使用get dictionary方法replace,似乎比data['sex'] = data['sex'].apply({1:'Male', 0:'Female'}.get) 快一点:

timeit

使用%%timeit data['sex'].replace([0,1],['Female','Male'],inplace=True) 进行测试:

The slowest run took 5.83 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 510 µs per loop

结果:

apply

使用%%timeit data['sex'] = data['sex'].apply({1:'Male', 0:'Female'}.get)

The slowest run took 5.92 times longer than the fastest. This could mean that an intermediate result is being cached.
1000 loops, best of 3: 331 µs per loop

结果:

apply

注意:如果数据框中列的所有可能值都在字典中定义,则应使用带有字典的 label,对于那些未在字典中定义的值,它将为空。

答案 2 :(得分:0)

也可以尝试!
创建替换值字典。

avg_dict = {}
with open('ecc.txt') as f:
    data = f.read().split(' ')
    sum = 0
    i = 0
    for str_number in data:
       sum += int(str_number)
       i += 1
       if i % 360 == 0:
          avg_dict[i] = sum/360
          sum = 0

enter image description here

data = list(f.read())

  

enter image description here

使用map函数替换值

import pandas as pd
data = pd.DataFrame([[1,0],[0,1],[1,0],[0,1]], columns=["sex", "split"])

替换后的输出
enter image description here