【问题标题】:The problem that a value whose index I know with the loc function cannot update another column in the same index?我使用 loc 函数知道其索引的值无法更新同一索引中的另一列的问题?
【发布时间】:2020-10-22 20:45:14
【问题描述】:

数据表:

         ARAÇ      VEHICLE_YEAR   NUM_PASSENGERS
0        CHEVROLET      2017           NaN
1        NISSAN         2017           NaN
2        HYUNDAI        2017           1.0
3        DODGE          2017           NaN

我想使用 loc 函数更新多个索引和该索引上的列数据。 但是当我使用 loc 函数时,它将新值更改为两个

listcolumns = ['VEHICLE_YEAR', 'NUM_PASSENGERS']
listnewvalue = [16000, 28000]
indexlister = [0, 1]

data.loc[indexlister , listcolumns] = listnewvalue

正如您在下面的输出中看到的那样。只是零,第一个索引“VEHICLE_YEAR”应该是 16000,“NUM_PASSENGERS”应该是 28000。但是,两个列中的零和第一行都发生了变化。 我如何检查这个并只更改我想要的列和索引。或者你有不同的方法吗?非常感谢。

输出:

     ARAÇ      VEHICLE_YEAR   NUM_PASSENGERS
0  CHEVROLET     16000         28000.0
1  NISSAN        16000         28000.0

在打印输出中,我将字段设置为空,以便出现新条目。例如;我想将值 2005 分配给列 'VEHICLE_YEAR' 的 0 索引和列 'NUM_PASSENGERS' 的第一个索引 2005

我想要的输出如下:

             ARAÇ     VEHICLE_YEAR  NUM_PASSENGERS
0        CHEVROLET         2005             Nan
1           NISSAN          Nan             2005
2           HYUNDAI         Nan             Nan

【问题讨论】:

  • 在调用 loc() 之前,您的表格是什么样的?您希望它在之后是什么样的?
  • 我添加了我的表。谢谢

标签: python python-3.x pandas numpy matplotlib


【解决方案1】:

您设置值的列表需要与您使用 loc 选择的行数和列数相对应。如果它接收到一个列表,它会将这些列中的所有选定行分配给该值。

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'ARAC' : ['CHEVROLET', 'NISSAN', 'HYUNDAI', 'DODGE'],
    'VEHICLE_YEAR' : [2017, 2017, 2017, 2017],
    'NUM_PASSENGERS' : [np.nan, np.nan, 1.0, np.nan]
})

        ARAC  NUM_PASSENGERS  VEHICLE_YEAR
0  CHEVROLET             NaN          2017
1     NISSAN             NaN          2017
2    HYUNDAI             1.0          2017
3      DODGE             NaN          2017

df.loc[[0, 2], ['NUM_PASSENGERS', 'VEHICLE_YEAR']] = [[1000, 2014], [3000, 2015]]

        ARAC  NUM_PASSENGERS  VEHICLE_YEAR
0  CHEVROLET          1000.0          2014
1     NISSAN             NaN          2017
2    HYUNDAI          3000.0          2015
3      DODGE             NaN          2017

如果您只想更改 NUM_PASSENGERS 列中的值,请仅选择该列并为其提供一个列表/数组,长度与您的行索引相同。

df.loc[[0,1,3], ['NUM_PASSENGERS']] = [10, 20, 30]
        ARAC  NUM_PASSENGERS  VEHICLE_YEAR
0  CHEVROLET            10.0          2014
1     NISSAN            20.0          2017
2    HYUNDAI          3000.0          2015
3      DODGE            30.0          2017

这些文档也可能会有所帮助。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html#pandas.DataFrame.loc

如果这没有回答您的问题,请提供您的预期输出。

【讨论】:

  • 我添加了新的描述和我想要得到的东西。谢谢
  • 要在不同列的不同行中设置特定值,我相信您需要为每一列调用 loc 。 df.loc[[0], 'VEHICLE_YEAR'] = 2015 df.loc[[1], 'NUM_PASSENGERS'] = 2015
  • 我不想让您感到疲倦,非常感谢您,但是我从用户那里获取了此数据,并且一旦我必须在 for 循环中运行所有数据。但是当它进入for循环时,它给出了我不幸遇到的输出。
  • 非常感谢。你花时间陪我。你给了我不同的观点。当然,我并没有直接期待现成的解决方案。但是你已经想出了一个完整的解决方案。它是否真的解决了我的问题并不重要。它调动了我脑海中的一堆想法,我解决了这个问题。
【解决方案2】:

我解决了如下问题。 我无法准确描述这个问题,我正在努力解决这个问题,但是当我这样改变它时,它就奏效了。现在我可以将我想要的行和列值更改为我想要的值。

listcolumns = ['VEHICLE_YEAR', 'NUM_PASSENGERS']
listnewvalue = [16000, 28000]
indexlister = [0, 1]

for i in len(indexlister):
    df.loc[lister[count], listcolumn[count]] = listnewvalue[count]

【讨论】:

    猜你喜欢
    • 2021-11-05
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    • 2016-04-28
    相关资源
    最近更新 更多