【问题标题】:Subtracting the average value of 60 row from the other rows in a dataframe从数据框中的其他行中减去 60 行的平均值
【发布时间】:2017-03-07 14:53:27
【问题描述】:

我有一个使用 pandas 导入的 DataFrame,它由 2135 行和 518 列组成。现在我想取前 60 行的平均值,然后从其他行中减去这些值。到目前为止,我使用了这个:

mean = df[1:60].mean()

取前 60 行的平均值。我试图通过使用来减去它:

df[61:2135] - mean

但这不起作用。我已经尝试了更多的东西,但我似乎无法弄清楚。可能是数据框的形状,因为 mean 的形状为 (517,) 而 df[61:2135] 的形状为 (2072,518)。

【问题讨论】:

  • 发布我可以运行的原始数据和代码来重现您的问题,我的回答表明这应该有效
  • 这里是我使用的文件的链接:filedropper.com/csvdata
  • 你的代码在哪里?
  • 好吧,你的 csv 没有标题列,这很好,但你的行以 ;;; 结尾,这可能是最后一列的问题
  • 导入时我跳过第一行,因此第二行位于列标题之前(它们是离子质量)

标签: python pandas dataframe rows subtraction


【解决方案1】:

您的数据看起来格式不正确,最后一列有尾随分号 ...;;; 您需要替换这些并转换回浮点数:

In [44]:
df[517] = df[517].str.replace(';;;','').astype(float)
df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2134 entries, 0 to 2133
Columns: 518 entries, 0 to 517
dtypes: float64(518)
memory usage: 8.4 MB

那么你尝试过的就行了

此外,您的第二行看起来不像是有效的列行,因此您需要将 header=None 传递给 read_csv

df = pd.read_csv ("csvdata.csv", sep=",",skiprows=1, header=None)

【讨论】:

  • 当我尝试我写的内容时,我得到了错误:ValueError: can only convert a array of size 1 to a Python scalar
猜你喜欢
  • 2018-10-07
  • 2019-09-09
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-26
  • 2020-06-25
  • 1970-01-01
相关资源
最近更新 更多