我知道这个问题有很多主题,但这些方法都没有对我有用,所以我发布了我的具体情况
我有一个如下所示的数据框:
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()?或者有更好的方法来有条件地替换值吗?
答案 0 :(得分:42)
是的,您使用不当,Series.replace()
默认情况下不是就地操作,它会返回替换的数据框/系列,您需要将其分配回dataFrame / Series才能发生效果。或者,如果您需要在原地进行,则需要将data['sex'].replace(0, 'Female',inplace=True)
data['sex'].replace(1, 'Male',inplace=True)
关键字参数指定为replace
示例 -
list
此外,您可以使用to_replace
对value
参数以及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
data = list(f.read())
使用map函数替换值
import pandas as pd
data = pd.DataFrame([[1,0],[0,1],[1,0],[0,1]], columns=["sex", "split"])