【问题标题】:simple operations with python on excel file用python对excel文件进​​行简单操作
【发布时间】:2019-10-07 14:21:04
【问题描述】:

x , y , 粒子

23、25、0

12、15、0

54、45、0

32、11、1

21、43、1

43、11、1

excel 中有 3 列的产量。第一列 x,第二列 y,第三列 ID。如果粒子具有相同的标识号(ID),我想减去具有相同 ID 号的粒子的 x 和 y。例如;

对于 ID = 0 的列,我希望它:

对于 x 应该是
23-12 = 11
11-54 = -43

对于 y 应该是

25-15 = 10

10-45 = -35

这是我为它编写的代码。第一个对于相同的 ID 号可以正常工作,但在第二个周期中出现范围错误。可能是什么问题呢。我该如何解决。

from pyexcel_ods import get_data,save_data

# -*- coding: utf-8 -*-

data = get_data("deneme.ods")

s,extract=0,0

for i in range(len(data[u'Sheet1'])-2):
if data[u'Sheet1'][i][2]==data[u'Sheet1'][i+1][2]:
    s+=1
    continue
else:
    for j in range(s+1):
        extract -= data[u'Sheet1'][j][1]
        extract = abs(extract)
    data[u'Sheet1'][i].append(extract)
    extract=0
    s=0

save_data('deneme1.ods',data)

【问题讨论】:

  • 你能用熊猫吗?如果是,请查看 groupby 方法。
  • 库无关紧要。这里算法苦恼

标签: python excel subtraction operation pyexcel


【解决方案1】:

如果您可以将文件加载到数据框中,则可以这样做。

import pandas as pd
from operator import sub
from functools import reduce

d = [["x", "y", "particle"], [23, 25, 0],[12, 15, 0], [54, 45, 0], [32, 11, 1], [21, 43, 1], [43, 11, 1]]

df = pd.DataFrame(d[1:], columns=d[0])

my_sub = lambda e: reduce(sub, e)

df2 = df.pivot_table(index = "particle", values=["x", "y"], aggfunc=my_sub)
print(df2)

【讨论】:

  • 非常感谢。看起来 pandas 工作得更快,并且产生更规律的输出。
  • 是的,pandas 是建立在 numpy 之上的,主要是用 C 语言编写的。很高兴能帮到你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 1970-01-01
  • 2012-07-15
相关资源
最近更新 更多