在一定条件下替换熊猫的行



我有两列,比如:"form_field"one_answers"field_value",如下所示:

form_field   field_value
0            1             4
1            2             4
2            3             1
3            4             1
4            5             4
5            6             1
6            7             1
7            8             3
8            9             1

现在,我希望对于某些form_files,应该替换fieldvalue中与其对应的值。例如,对于form_field 1,4,9,我希望字段值以这样的方式改变,如果它是1,则将其改变为4,如果是2,则将它改变为3,如果3将其改变成2,如果4将其改变到1。所以我尝试将所有需要更改的form_filed值放在一个名为"的列表中;e";并运行以下代码:

import pandas as pd
import matplotlib.pyplot as plt
import os
import numpy as np

all_files = os.listdir("Trap_data/") 
os.chdir(r"Trap_data/") 
e=[1,2,5,8,10,11,15,16,19,20,21,23,26,27,30,33,34,36,39]
for file in all_files:  
f_name = file
df_1 = pd.read_csv(f_name,nrows=40)

for i in e:

df_1['form_field'][i] = pd.to_numeric((df_1[' field_value'][i]), errors='coerce').replace([1,2,3,4],[4,3,2,1])
print(df_1)

然而,这引发了一个错误:

AttributeError: 'numpy.int64' object has no attribute 'replace'

您可以将代码修改为:

#e=[1,2,5,8,10,11,15,16,19,20,21,23,26,27,30,33,34,36,39]
e= [1, 4, 9]
val_map = {1: 4, 2: 3, 3: 2, 4: 1}
df.loc[df['form_field'].isin(e), 'field_value'] = pd.to_numeric(df['field_value'], errors='coerce').replace(val_map)

结果:

print(df)
form_field   field_value
0            1             4
1            2             4
2            3             1
3            4             1
4            5             4
5            6             1
6            7             1
7            8             3
8            9             1

使用此数据:

form_field   field_value
0            1             4
1            2             4
2            3             1
3            4             1
4            5             4
5            6             1
6            7             1
7            8             3
8            9             1

然后:

# copy the above, read into dataframe
# df = pd.read_clipboard(sep="s+")
maps = {
1: 4,
2: 3,
3: 2,
4: 1,
}
df.loc[df["form_field"].isin(maps.keys()), "field_value"] = df.loc[
df["form_field"].isin(maps.keys()), "form_field"
].replace(maps)

提供:

form_field  field_value
0           1            4
1           2            3
2           3            2
3           4            1
4           5            4
5           6            1
6           7            1
7           8            3
8           9            1

最新更新