【问题标题】:How to Iterate over DataFrame Column and Update Column Values如何迭代 DataFrame 列并更新列值
【发布时间】:2020-05-10 02:08:10
【问题描述】:

我正在尝试遍历 abc 列并更新其值,但我不断收到错误。任何帮助将不胜感激。

somedata.csv:
                    ABC
0               0.00094
1               0.00094
2               0.00094
3               0.00094
...
4999            0.00094


data = pd.read_csv("somedata.csv")
abc = pd.DataFrame(data, columns = ['ABC'])

for column in abc:
    value = (abc - min(abc)) / (max(abc) - min(abc))
    abc = value

错误:numpy.core._exceptions.UFuncTypeError:ufunc 'subtract' 不包含签名匹配类型的循环(dtype('dtype('

第 72 行,在
值 = (abc - min(abc)) / (max(abc) - min(abc))

【问题讨论】:

    标签: python pandas loops iteration


    【解决方案1】:

    所以有一些问题。在“abc”实例化上,完成“)”。 value = (abc - min(abc)) / (max(abc) - min(abc)) 这一行非常令人困惑。 abc 你有一个数据框列,所以我假设你想更新这个名为“ABC”的列的每一行值。

    要获取值 = (ThisRowValue - min(abc)) / (max(abc) - min(abc)),请使用 Panda's max and min

    我会写这个

    #Separate out the column (assuming multiple columns)
    abc = df['ABC']
    abc = list(map(float, abc)) #Edited to turn it into float values
    
    list2 = [] # Empty list for storage
    for this_row_value in abc: #Iterate for each value in column 'ABC'
        value = (this_row_value - abc.min()) / (abc.max() - abc.min()) #Utilize Panda's Min/Max
        list2.append(value)
    
    #Set updated values to the column values. You can also use Pandas Update.
    df['ABC'] = list2
    

    df 只是数据框对象。

    【讨论】:

    • 谢谢,但我仍然遇到同样的错误:numpy.core._exceptions.UFuncTypeError: ufunc 'subtract' did not contain a loop with signature matching types (dtype(' dtype('
    • 那么可能发生的事情是将您的数据作为字符串接收。我假设它们是数字,可能带有小数。将它们转换为浮点数。您可以编写一个快速方法来转换 df['ABC'].tolist() ,解析每一个,然后返回列表。然后将新的 Float 列表设置为 ['ABC'] 列,方法与上述代码相同。
    • float_list = list(map(float, string_list)) 这会将字符串列表转换为一行中的浮点数。如果您可以显示来自 somedata.csv 的数据或 sn-p,这也会有所帮助。我修改了上面的代码以包含它。
    • 还是不行。我得到的错误是:abc = list(map(float, abc)) ValueError: could not convert string to float: 'abc_final_avg' 不知道你是否还想帮忙,但我添加了一个 csv 数据的 sn-p
    • 对于未来的观众@Pete 方法确实有效,我只需要先展平 df,因为在尝试计算最大值 - 最小值时包含列标题 (ABC)
    猜你喜欢
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2016-03-16
    • 2019-04-11
    • 2018-12-29
    • 2021-03-17
    • 2016-09-05
    • 1970-01-01
    相关资源
    最近更新 更多