失败:将单个DataFrame列的单个值替换为新值



我正在尝试替换列中的一些ID。

我正在使用pd.read_excel读取excel文件,并将其存储在数据帧中:

df_A2C = pd.read_excel(file_loc1, index_col=None, na_values=['NA'])

这可以用再现

df_A2C = pd.DataFrame({'FROM_ID': [1, 1, 1, 1, 1],
'TO_ID': [7, 26, 71, 83, 98],
'DURATION_H': [0.528555555555556,
0.512511111111111,
0.432452777777778,
0.599486111111111,
0.590516666666667],
'DIST_KM': [38.4398, 37.38515, 32.57571, 39.26188, 35.53107]})

在此之后,我将检查要使用以下代码替换的值:df_A2C.loc[(df_A2C['FROM_ID'] == 9)]

这会输出:

FROM_ID TO_ID   DURATION_H  DIST_KM FROM_ID
9   7        1.183683   89.26777    9
9   26       1.167639   88.21312    9
9   71       1.087581   83.40369    9
9   83       1.254614   90.08985    9
9   98       1.245642   86.35904    9

现在,我尝试用8替换FROM_ID9

我尝试了以下代码。

df_A2C['FROM_ID'] = df_A2C['FROM_ID'].replace('9','8')

此外,

df_A2C.loc[ df_A2C["FROM_ID"] == "9", "FROM_ID"] = "8"

为了测试结果,我正在进行df_A2C.loc[(df_A2C['FROM_ID'] == 8)]

输出:

FROM_ID TO_ID   DURATION_H  DIST_KM FROM_ID

这些都不起作用。

我想用8替换FROM_ID values9。我不想创建另一列,只想替换现有的列值。

我在这里犯了什么错误吗

你试过吗

df_A2C['FROM_ID'] = df_A2C['FROM_ID'].apply(lambda x: 8 if x==9 else x)

如果您的值是int

如果您的值是字符串,请使用此

df_A2C['FROM_ID'] = df_A2C['FROM_ID'].apply(lambda x: '8' if x=='9' else x)

基于replace的解决方案有效,我想问题出在其他地方(例如,您有两列标记为FROM_ID(

使用输入示例:

df_A2C = pd.DataFrame({'FROM_ID': [1, 1, 1, 1, 1],
'TO_ID': [7, 26, 71, 83, 98],
'DURATION_H': [0.528555555555556,
0.512511111111111,
0.432452777777778,
0.599486111111111,
0.590516666666667],
'DIST_KM': [38.4398, 37.38515, 32.57571, 39.26188, 35.53107]})

不幸的是,没有FROM_ID等于8的记录,但它们都等于1。所以假设您想将1更改为100。

df_A2C['FROM_ID'] = df_A2C['FROM_ID'].replace(1, 100)

则CCD_ 16表示为

FROM_ID  TO_ID  DURATION_H   DIST_KM
0      100      7    0.528556  38.43980
1      100     26    0.512511  37.38515
2      100     71    0.432453  32.57571
3      100     83    0.599486  39.26188
4      100     98    0.590517  35.53107

正如预期的那样。您也可以调用df_A2C.loc[(df_A2C['FROM_ID'] == 100)],返回相同的结果。

最新更新