summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Myers <jason@jasonamyers.com>2017-08-26 20:43:35 -0500
committerJason Myers <jason@jasonamyers.com>2017-08-26 20:43:35 -0500
commit00e2ffa2efd1a7dd47d2a4a2a4303e1a8beb71e3 (patch)
tree6b888ef7e4467a0c1e02d9d8db5b6d70cbb817b9
parenta3cd2c9cffaa2940762453f5a3c4f2ae69065aa7 (diff)
downloadtablib-00e2ffa2efd1a7dd47d2a4a2a4303e1a8beb71e3.tar.gz
Adding initial DataFrames Support
Signed-off-by: Jason Myers <jason@jasonamyers.com>
-rwxr-xr-xsetup.py1
-rw-r--r--tablib/core.py12
-rw-r--r--tablib/formats/__init__.py3
-rw-r--r--tablib/formats/_df.py40
-rwxr-xr-xtest_tablib.py1
5 files changed, 56 insertions, 1 deletions
diff --git a/setup.py b/setup.py
index e46eb88..5691821 100755
--- a/setup.py
+++ b/setup.py
@@ -48,6 +48,7 @@ install = [
'xlrd',
'xlwt',
'pyyaml',
+ 'pandas',
]
with open('tablib/core.py', 'r') as fd:
diff --git a/tablib/core.py b/tablib/core.py
index be648c2..13a4514 100644
--- a/tablib/core.py
+++ b/tablib/core.py
@@ -570,6 +570,18 @@ class Dataset(object):
"""
pass
+ @property
+ def df():
+ """A DataFrame representation of the :class:`Dataset` object.
+
+ A dataset object can also be imported by setting the :class:`Dataset.df` attribute: ::
+
+ data = tablib.Dataset()
+ data.df = DataFrame(np.random.randn(6,4))
+
+ Import assumes (for now) that headers exist.
+ """
+ pass
@property
def json():
diff --git a/tablib/formats/__init__.py b/tablib/formats/__init__.py
index 5cca19f..94b5bc9 100644
--- a/tablib/formats/__init__.py
+++ b/tablib/formats/__init__.py
@@ -13,5 +13,6 @@ from . import _xlsx as xlsx
from . import _ods as ods
from . import _dbf as dbf
from . import _latex as latex
+from . import _df as df
-available = (json, xls, yaml, csv, dbf, tsv, html, latex, xlsx, ods)
+available = (json, xls, yaml, csv, dbf, tsv, html, latex, xlsx, ods, df)
diff --git a/tablib/formats/_df.py b/tablib/formats/_df.py
new file mode 100644
index 0000000..5996ce9
--- /dev/null
+++ b/tablib/formats/_df.py
@@ -0,0 +1,40 @@
+""" Tablib - DataFrame Support.
+"""
+
+
+import sys
+
+
+if sys.version_info[0] > 2:
+ from io import BytesIO
+else:
+ from cStringIO import StringIO as BytesIO
+
+from pandas import DataFrame
+
+import tablib
+
+from tablib.compat import unicode
+
+title = 'df'
+extensions = ('df', )
+
+def detect(stream):
+ """Returns True if given stream is a DataFrame."""
+ try:
+ DataFrame(stream)
+ return True
+ except ValueError:
+ return False
+
+
+def export_set(dset, index=None):
+ """Returns DataFrame representation of DataBook."""
+ dataframe = DataFrame(dset.dict, columns=dset.headers)
+ return dataframe
+
+
+def import_set(dset, in_stream):
+ """Returns dataset from DataFrame."""
+ dset.wipe()
+ dset.dict = in_stream.to_dict(orient='records')
diff --git a/test_tablib.py b/test_tablib.py
index 03a46df..9bd5f12 100755
--- a/test_tablib.py
+++ b/test_tablib.py
@@ -383,6 +383,7 @@ class TablibTestCase(unittest.TestCase):
data.ods
data.html
data.latex
+ data.df
def test_datetime_append(self):
"""Passes in a single datetime and a single date and exports."""