【问题标题】:ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()ValueError:DataFrame 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
【发布时间】:2015-10-11 21:08:58
【问题描述】:

我尝试将数据转发到 Excel,但收到主题错误。

我想将一些 excel 文件合并为一个 excel 文件。首先,我创建了 all_info 数组,以便将所有数据收集到其中。

all_info = []

之后,我阅读了每个 excel 文件。 Excel文件如下;样品 1、样品 2 等等。

data = pd.read_excel('sample1.xlsx', 'Sheet1')

我将每个 excel 文件的数据添加到 all_info 数组中。

for i in range(0, len(data)):
    all_info.append(data)

在我合并 all_info 数组中的所有数据后,我执行了下面的代码,但收到了主题错误。

df = pd.DataFrame(all_info)
df.to_excel("all_info.xlsx")

您可能会在下面看到错误详细信息。

ValueError                                Traceback (most recent call last)
<ipython-input-85-5bff7d788042> in <module>()
  1 df = pd.DataFrame(all_tweets)
----> 2 df.to_excel("all_info.xlsx")

 /usr/lib/python2.7/dist-packages/pandas/core/frame.pyc in to_excel(self, excel_writer, sheet_name, na_rep, float_format, cols, header, index, index_label, startrow, startcol, engine, merge_cells)
1202         formatted_cells = formatter.get_formatted_cells()
1203         excel_writer.write_cells(formatted_cells, sheet_name,
-> 1204                                  startrow=startrow, startcol=startcol)
1205         if need_save:
1206             excel_writer.save()

/usr/lib/python2.7/dist-packages/pandas/io/excel.pyc in write_cells(self, cells, sheet_name, startrow, startcol)
525             colletter = get_column_letter(startcol + cell.col + 1)
526             xcell = wks.cell("%s%s" % (colletter, startrow + cell.row + 1))
--> 527             xcell.value = _conv_value(cell.val)
528             style = None
529             if cell.style:

/usr/lib/pymodules/python2.7/openpyxl/cell.pyc in _set_value(self, value)
339     def _set_value(self, value):
340         """Set the value and infer type and display options."""
--> 341         self.bind_value(value)
342 
343     value = property(_get_value, _set_value,

/usr/lib/pymodules/python2.7/openpyxl/cell.pyc in bind_value(self, value)
278     def bind_value(self, value):
279         """Given a value, infer type and display options."""
--> 280         self._data_type = self.data_type_for_value(value)
281         if value is None:
282             self.set_value_explicit('', self.TYPE_NULL)

/usr/lib/pymodules/python2.7/openpyxl/cell.pyc in data_type_for_value(self, value)
260         elif isinstance(value, (datetime.datetime, datetime.date, datetime.time, datetime.timedelta)):
261             data_type = self.TYPE_NUMERIC
--> 262         elif not value:
263             data_type = self.TYPE_STRING
264         elif isinstance(value, basestring) and value[0] == '=':

/usr/lib/python2.7/dist-packages/pandas/core/generic.pyc in __nonzero__(self)
674         raise ValueError("The truth value of a {0} is ambiguous. "
675                          "Use a.empty, a.bool(), a.item(), a.any() or a.all()."
--> 676                          .format(self.__class__.__name__))
677 
678     __bool__ = __nonzero__

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

【问题讨论】:

  • 您的问题令人困惑。如果 'data' 是一个 pd.DataFrame 并且您遍历 range(0,len(data)) 然后将数据添加到您的列表 'all_info' 中,您只需将整个 DataFrame 'data' i 次添加到列表中。您的 DataFrame df = pd.DataFrame(all_info) 是一个 Frame,其中包含 i 次 DataFrame 'data'。导出不起作用似乎是合乎逻辑的......
  • @user2532323 很抱歉。我现在试着弄清楚。还在纠结吗?
  • 您是否尝试创建一个包含所有数据列的列表?目前,正在创建一个数据框列表,您加载的 excel 文件中的每一行都有一个完整的数据框。
  • @leroyJr 是的,我尝试创建一个列表。我还收集了上面的所有数据列,但我无法将其转发到 all_info.xlsx 文件中。
  • 您能否举例说明您的输入和输出数据应该是什么样子?目前尚不清楚您实际上想要完成什么。

标签: python python-2.7 pandas


【解决方案1】:

你可能想做这样的事情吗?

fnames = ['sample1.xls', 'sample2.xls']
all_info = [pd.read_excel(f, 'Sheet1') for f in fnames]
df = pd.concat(all_info)
df.to_excel("all_info.xlsx")

这里,all_info 是一个 DataFrame 列表,其中每个元素都保存着不同的 Excel 数据。然后将它们连接成一个 DataFrame 并保存到磁盘...

【讨论】:

    猜你喜欢
    • 2021-11-28
    • 2021-07-31
    • 2021-08-31
    • 2016-12-01
    • 2019-01-24
    • 2021-08-06
    • 2020-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多