我有两列,比如:"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