Origin-Python Data Exchange
Contents
This folder contains examples showing data exchange between Python (list, dataframe, dictionary) and Origin objects ( workbook, matrixbook, project variables).
DataFrame and Column Format
''' This sample shows how to set Column Format with DataFrame and from_df, to_df functions. Make sure you've installed pandas. To install the module, open the Script Window (Shift+Alt+3), type the following and press Enter: pip install pandas The following will check and install: pip -chk pandas ''' import originpro as op import pandas as pd # Create a dataframe to fill the sheet df = pd.DataFrame({ 'Date': ['10/25/2018','02/21/2019','04/01/2020'], 'Gender':['Male','Male','Female'], 'Score': [75.5, 86.7, 91], }) df['Date'] = pd.to_datetime(df['Date']) df['Gender']= pd.Categorical(df['Gender']) wks=op.new_sheet() wks.from_df(df) #can also create book and get first sheet like this wks2=op.new_book('w', 'Copy using DF')[0] #column formats like date is automatically handled df1=wks.to_df() wks2.from_df(df1)
Get Tree in Origin as dict
''' To show how to get a Tree in Origin. Tree variables are used extensively inside Origin. In this example, we use an X-Function which will generate a Tree after its execution. The Tree will have the same name as the X-Function, which in the sample below is "fitlr". It does a simple linear fit and generates basic stats fromt the fit, see https://www.originlab.com/doc/X-Function/ref/fitLR ''' import originpro as op fn=op.path('e') + 'Samples\Curve Fitting\Linear Fit.dat' wks = op.new_sheet() wks.from_file(fn,False) #fit A(x) D(y) wks.get_book().lt_exec('fitlr (A,D)') dd = op.lt_tree_to_dict('fitlr') slope = dd['b'] err = dd['berr'] print(f'slope= {slope:.3f} +- {err:.3f}')
Matrix Data Exchange
'''This example transfers a 3D Numpy array (four 3X3 matrices) into Origin, the data is saved into a matrix sheet containing four matrix objects. Then the data is extracted from the matrix sheet and saved into Numpy arrays. ''' import numpy as np import originpro as op arr=np.random.rand(4,3,3) mxs=op.new_sheet('m') mxs.from_np(arr) mxs.show_thumbnails() # Extract the data from the four matrix objects and save into a Numpy 3D array. arr_3d=mxs.to_np3d() print(arr_3d.shape) # Extract the data from the first matrix object and save into a Numpy 2D array. arr_2d=mxs.to_np2d(0) print(arr_2d.shape)
Putting Data to Columns
''' This sample shows how to use from_list function to put data to Columns ''' import originpro as op # Prepare data. data=[x/10. for x in range(50)] # Prepare worksheet. wks=op.new_sheet() # Put data to col(A), and set Long Name, Units, designation as well wks.from_list('A',data, 'time', 'sec',axis='N') # Prepare data and out data to col(B) data1=[x*1.5 for x in range(50)] wks.from_list('B', data1, axis='X') # Add a third column wks.cols=3 # Use the sum of data and data1 to set the third column wks.from_list(2, [sum(i) for i in zip(data, data1)], comments = 'A+B')
Worksheet User Tree Access
''' This sample shows how to prepare a worksheet tree, and how to read the values back. This is useful to save the metadata of a data file. See the blog: https://blog.originlab.com/accessing-metadata-using-python ''' import originpro as op # Create a new worksheet and set worksheet tree values. wks = op.new_sheet() wks.set_str("tree.data.name", "Larry") wks.set_int("tree.data.age", 37) wks.set_float("tree.data.mean", 23.56) # access the tree as a dictionary dd = wks.userprops['data'] user=dd['name'] value=dd['age'] print(f'{user} is {value}') # you can also get the tree as an xml ElementTree for more advanced usage trWks = wks.usertree trData = trWks.find('data') for child in trData: print(f'{child.tag} = {child.text}') # how to put a modified tree to another sheet wk2 = op.new_sheet() age_node=trData.find('age') age_node.text='47' wk2.usertree=trWks print(wk2.userprops['data']['age'])