为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 pandas 从 DataFrame 中的所有元素中减去一个数字?

如何使用 pandas 从 DataFrame 中的所有元素中减去一个数字?

陪伴而非守候 2023-05-16 16:52:13
我正在尝试使用 pandas 从 DataFrame 中的所有元素中减去一个数字。但是,只有第一个元素被减去,其他元素得到NaN。这是数据:DataFrame_3x5.csvA   B   C0.1 0.3 0.50.2 0.4 0.60.3 0.5 0.70.4 0.6 0.80.5 0.7 0.9这是我的代码:import pandas as pddata = pd.read_csv(r"DataFrame_3x5.csv")df = pd.DataFrame(data)medianList = pd.DataFrame()for i in range(0, data.shape[1]):  medianList = medianList.append([df.iloc[:,i].median()], ignore_index=True)for i in range(0, data.shape[1]):  print(data.iloc[:,i])  print(medianList.iloc[i])  print(data.iloc[:,i] - medianList.iloc[i])  # print(data.iloc[:,i].sub([medianList.iloc[i]], axis='columns')) # doesn't work结果如下:0    0.11    0.22    0.33    0.44    0.5Name: A, dtype: float640    0.3Name: 0, dtype: float640   -0.21    NaN2    NaN3    NaN4    NaNdtype: float640    0.31    0.42    0.53    0.64    0.7Name: B, dtype: float640    0.5Name: 1, dtype: float640   -0.21    NaN2    NaN3    NaN4    NaNdtype: float640    0.51    0.62    0.73    0.84    0.9Name: C, dtype: float640    0.7Name: 2, dtype: float640   -0.21    NaN2    NaN3    NaN4    NaNdtype: float64我的期望:0   -0.21   -0.12    0.03    0.14    0.2根据这个网站,print(data.iloc[:,i].sub([medianList.iloc[i]], axis='columns'))...应该工作,但实际上它会产生错误:ValueError: No axis named columns for object type <class 'pandas.core.series.Series'>我不知道该怎么办了。请帮我。谢谢。
查看完整描述

4 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

你可以这样做:

df - df.median(axis=0)

熊猫会处理用于计算值的轴


查看完整回答
反对 回复 2023-05-16
?
慕容森

TA贡献1853条经验 获得超18个赞

一个简单的解决方案:


import pandas as pd

df = pd.read_csv(r"DataFrame_3x5.csv")


df['A'] - df['A'].median()

//img1.sycdn.imooc.com//6463448000015b1004090230.jpg

查看完整回答
反对 回复 2023-05-16
?
暮色呼如

TA贡献1853条经验 获得超9个赞

我想如果你先尝试dropna然后简单地减去它就可以了


df=df.dropna(how='any')

df['Sub']=int(df['A']) - int(df['B']) - int(df['C'])


查看完整回答
反对 回复 2023-05-16
?
撒科打诨

TA贡献1934条经验 获得超2个赞

import pandas as pd

data = pd.read_csv(r"DataFrame_3x5.csv")

df = pd.DataFrame(data)

medianList = pd.DataFrame()

for i in range(0, data.shape[1]):

  medianList = medianList.append([df.iloc[:,i].median()], ignore_index=True)


df1 = pd.DataFrame(columns=['A'])

j=0

for i in range(0, data.shape[0]):

    print(data['A'].iloc[i]) # one column

    print(medianList.iloc[i])  #1 value

    print(data['A'].iloc[i] - medianList.iloc[j])


查看完整回答
反对 回复 2023-05-16
  • 4 回答
  • 0 关注
  • 365 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信