【问题标题】:Reading a DataFrame from excel and performing actions on it从 excel 中读取 DataFrame 并对其执行操作
【发布时间】:2018-01-07 04:02:08
【问题描述】:

我有一张 Excel 表格。我想从中解析一个特定的列,并对 python 中该列中的每个单元格执行操作。我可以使用 panda 来解析列,

import pandas
Y = pandas.read_excel("C:\foo\abc.xlsx", sheetname="Prod", 
parse_cols="C", header=1)
print Y

我可以使用上述命令从工作表 Prod 中解析列“C”。现在,它同时打印所有单元格的数据。我想对每个单元格执行操作。有人可以建议怎么做吗?

我想保存每个单元格数据并使用该数据进行一些 api 调用。所以我需要某种 for 循环,它可以一次读取单个销售的数据,然后我可以使用该单元格数据执行 api 调用并重新运行循环。

【问题讨论】:

  • 在 Pandas 中,我们总是希望首先尝试矢量化方法,因此了解您想对C 列应用哪种操作可能很重要,以便为您提供最佳答案...
  • 你想做什么?
  • 我想将每个单元格数据保存在一个变量中,并对每个单元格执行 api 调用。就像我需要做 for 循环,它一次读取一个单元格并调用 api 来处理该数据并重新运行循环。如果熊猫不适合这个,我还应该用什么?

标签: python excel pandas csv


【解决方案1】:

您可以使用DataFrame.eval() 方法在一个链接步骤中完成:

演示 - 平方列 C:

Y = pandas.read_excel("C:\foo\abc.xlsx", sheetname="Prod", 
                      parse_cols="C", header=1) \
          .eval("C**2", inplace=False)

【讨论】:

  • 我更新了问题。我认为 .eval 不适用于我的情况。你能看看更新的问题吗?
【解决方案2】:

如果您的 API 调用每次都执行一些操作并返回单个值(您想要收集的值),那么您可以像这样使用 map

import pandas as pd


def some_kind_of_function(data_value):
   # Do some API call here that transforms `data_value` into `output_value`

   return output_value


s1 = pd.read_excel("C:\foo\abc.xlsx", sheetname="Prod", parse_cols="C", header=1, squeeze=True)
s2 = s1.map(some_kind_of_function)    

如果您的 API 调用不会返回值(或您关心的任何内容),那么您可以像这样使用 iteritems

import pandas as pd

s1 = pd.read_excel("C:\foo\abc.xlsx", sheetname="Prod", parse_cols="C", header=1, squeeze=True)

for (index_value, data_value) in s1.iteritems():
    # Do some API call here that uses `data_value`

注意:我已将参数 squeeze=True 添加到 read_excel 调用中。这会导致将 excel 数据存储在 pandas Series 而不是 DataFrame 中。

【讨论】:

    猜你喜欢
    • 2017-03-12
    • 2017-04-29
    • 2021-08-19
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多