Pandas:按数字列名聚合,替换时给出错误

2024-04-27 03:59:06 发布

您现在位置:Python中文网/ 问答频道 /正文

为了消除测量时的变化,我想在一个特定的范围内编译。你知道吗

例如,我想将列名加在整数的±0.1范围内,并将其赋给整数列。但是,由于形状错误,我无法替换。你知道吗

我认为这是由转换列的类型引起的,但是我应该怎么做呢?你知道吗

谢谢你。你知道吗

import pandas as pd
import  numpy as np

df = pd.DataFrame(data= np.arange(0,10000,1).reshape(100,100))
df.columns = np.arange(0,10,0.1)

print(df.head())
df.columns = df.columns.astype(float)
temp = df.columns.values

for n in np.arange(1, 9, 1):
 l = n - 0.1
 m = n + 0.1
 calc_n = temp[np.where((temp >= l) & (temp <= m))]
 calc = np.sum(df[df.columns.intersection(calc_n)], axis=1)
 n_position = temp[np.where(temp == n)]
 df[n_position] = calc.values

ValueError:形状不匹配:形状(100,)的值数组无法广播到形状(1100)的索引结果


Tags: columnsimportdfas错误nppositioncalc
1条回答
网友
1楼 · 发布于 2024-04-27 03:59:06

ValueError是因为n_position是一个数组。所以df[n_position]给你一个数据帧而不是一个列。你知道吗

使用浮点作为索引通常不是一个好主意。在比较浮动时要小心。这行calc_n = temp[np.where((temp >= l) & (temp <= m))]并不总是给出准确的结果。你知道吗

对于初学者,请尝试:

for n in np.arange(1, 9, 1):
    margin = 0.101     # set your own margin
    calc_n = np.where(np.abs(temp-n) < margin)
    df[n] = df.iloc[:,calc_n[0]].sum(axis=1)

相关问题 更多 >