# data.getColumnNames() vs system.dataset.getColumnHeaders(data)

**URL:** <https://forum.inductiveautomation.com/t/data-getcolumnnames-vs-system-dataset-getcolumnheaders-data/66933>\
**Category:** Ignition\
**Tags:** ignition81, perspective\
**Created:** [November 25, 2022, 4:15pm UTC](https://forum.inductiveautomation.com/t/data-getcolumnnames-vs-system-dataset-getcolumnheaders-data/66933 "2022-11-25T16:15:19Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![bfreeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bfreeman/32/87436_2.png) [@bfreeman](https://forum.inductiveautomation.com/u/bfreeman)\
**Post date:** [November 25, 2022, 4:15pm UTC](https://forum.inductiveautomation.com/t/data-getcolumnnames-vs-system-dataset-getcolumnheaders-data/66933/1 "2022-11-25T16:15:19Z")

</div>

Hi,

I am trying a create a new dataset from an existing one.

I first tried using the following code:  
`system.dataset.toDataSet(data.getColumnNames(), new_data)`  
But I get a `TypeError: toDataSet(): 1st arg can't be coerced to org.python.core.PySequence`

I then found another solution:  
`system.dataset.toDataSet(system.dataset.getColumnHeaders(data), new_data)`  
Which works.

Is it normal that `data.getColumnNames()` does not return an object of the same type as `system.dataset.getColumnHeaders(data)`?

Thanks

PS: Running Ignition 8.1.18

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 25, 2022, 4:22pm UTC](https://forum.inductiveautomation.com/t/data-getcolumnnames-vs-system-dataset-getcolumnheaders-data/66933/2 "2022-11-25T16:22:50Z")

</div>

`.getColumnNames()` is a java method of the `Dataset` interface, and is only required to return a java `List<String>`. You can wrap it in `list()` to make it deliver a python type. You can save some typing and some speed by using `list(data.columnNames)`, taking advantage of jython's recognition of NetBeans-style getters as properties.

{ Edit: oops, `list`, not `str`. }

---

<div class="post-metadata">

**Author:** ![code\_skin](https://avatars.discourse-cdn.com/v4/letter/c/43a26b/32.png) [@code\_skin](https://forum.inductiveautomation.com/u/code_skin)\
**Post date:** [November 25, 2022, 4:24pm UTC](https://forum.inductiveautomation.com/t/data-getcolumnnames-vs-system-dataset-getcolumnheaders-data/66933/3 "2022-11-25T16:24:11Z")

</div>

Yes, it's completely normal that it returns an immutable object (UnmodifiableRandomAccessList). You could `system.dataset.toDataSet(list(data.getColumnNames()), new_data)`

---

<div class="post-metadata">

**Author:** ![bfreeman](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/bfreeman/32/87436_2.png) [@bfreeman](https://forum.inductiveautomation.com/u/bfreeman)\
**Post date:** [November 25, 2022, 4:41pm UTC](https://forum.inductiveautomation.com/t/data-getcolumnnames-vs-system-dataset-getcolumnheaders-data/66933/4 "2022-11-25T16:41:14Z")

</div>

Understood. I confirm wrapping in `list()` works. Thanks!

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 25, 2022, 9:58pm UTC](https://forum.inductiveautomation.com/t/data-getcolumnnames-vs-system-dataset-getcolumnheaders-data/66933/5 "2022-11-25T21:58:31Z")

</div>

I would also maintain, personally, that toDataSet should be happy to accept any iterable of strings for the column names; the check for "PySequence" (an internal Jython type) is too strict.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [November 25, 2022, 10:08pm UTC](https://forum.inductiveautomation.com/t/data-getcolumnnames-vs-system-dataset-getcolumnheaders-data/66933/6 "2022-11-25T22:08:49Z")

</div>

If it simply declared that argument as `List<>`, jython would be happy to feed it any sequence.
