def makeDataFrame(phases):
""" Return Pandas DataFrame object, with CIF files as index and ellipsoid parameters as columns (hierarchical by centre atom)"""
import pandas as pd
from pieface.readcoords import Crystal
if isinstance(phases, dict):
if isinstance( phases[phases.keys()[0]], Crystal): # We are reading a dict of Crystals: convert to nested dict first
alldata = makenesteddict(phases)
elif isinstance( phases[phases.keys()[0]], dict ): # Looking at a dict of dicts: assume correct for pandas...
alldata = phases
d = dict([ (i, pd.DataFrame(alldata[i]).set_index('files')) for i in alldata.keys() ]) # Make dict of DataFrames
frame = pd.concat(d, axis=1)
if len(frame.index) == 1: # We're looking at a single cif file - unstack DataFrame with atoms as index
return frame.ix[frame.index[0]].unstack().apply(pd.to_numeric, errors='ignore') # Need to convert back to float/int when unstacking
else:
return frame
else:
raise TypeError("Unknown data format for conversion to DataFrame (expected dict)")
评论列表
文章目录