Matlab impelementation of DataFrame/Pandas concept. This project wraps and makes use of as much as possible of the Matlab table, but with the intent of providing a class implementation that could be specialized further.
</style>
The DataFrame is created in the same exact way as a table. The constructor just passes the arguements to the table constructor, then stores the table as as private property. We can still retrieve table properties
df = DataFrame(0, 0, 0, 0, ... 'VariableNames', {'test1', 'test2','test3','test4',}); df.Properties
ans =Description: '' VariableDescriptions: {} VariableUnits: {} DimensionNames: {'Row' 'Variable'} UserData: [] RowNames: {} VariableNames: {'test1' 'test2' 'test3' 'test4'}
DataFrame overrides the display method to show the table instead of the DataFrame object
df
df =test1 test2 test3 test4 _____ _____ _____ _____ 0 0 0 0
The column names are pass throughs into the actual table structure. We can access the column as normal
df.test1 df.test3
ans =0
ans =
0
You no longer need to know which possible functions you can use on a Matlab table. They are available to use either way.
df.height() height(df)
ans =1
ans =
1
Matlab blocks you from extending the table data structure, but we can get around that with this approach
df = DataFrame.fromCSV(which('ugly_data.csv'));
df.head();
Name Zeros Lat Lng Normal Negative _______________ _____ ________ ________ ___________ ________'Connor Hayden' 0 -2.58201 71.06714 0.006049531 3 GUID Date Timestamp ______________________________________ _________________ __________ '7B79A197-E85F-2BFF-F37E-727DEDAC9803' 'April 27th 2015' 1394414933 AlphaNumeric _____________ 'FSU09MJG3ZB'
Column data will show empty since we are just dynamically passing through them on each subscript call. Properties shows up with contents, since it uses a getter method
df.details();
DataFrame with properties:Properties: [1x1 struct] Normal: [] Lng: [] Negative: [] Zeros: [] Name: [] AlphaNumeric: [] Date: [] GUID: [] Lat: [] Timestamp: [] Name Zeros Lat Lng Normal Negative _______________ _____ ________ ________ ___________ ________ 'Connor Hayden' 0 -2.58201 71.06714 0.006049531 3 GUID Date Timestamp ______________________________________ _________________ __________ '7B79A197-E85F-2BFF-F37E-727DEDAC9803' 'April 27th 2015' 1394414933 AlphaNumeric _____________ 'FSU09MJG3ZB'
Variables:
Name: 20400x1 cell string Zeros: 20400x1 double Values: min 0 median 0 max 0 Lat: 20400x1 double Values: min -89.42406 median -1.02059 max 88.89347 Lng: 20400x1 double Values: min -177.18611 median 0.934815 max 176.4439 Normal: 20400x1 double Values: min -0.543252895 median -0.017611593 max 0.573277103 Negative: 20400x1 double Values: min -5 median 0.5 max 5 GUID: 20400x1 cell string Date: 20400x1 cell string Timestamp: 20400x1 double Values: min 1378967930 median 1403645750.5 max 1439505058 AlphaNumeric: 20400x1 cell string
tbl = readtable(which('ugly_data.csv')); try tbl.head(); head(tbl); catch err disp(err.message) end
Unrecognized variable name 'head'.
df.Lat2 = df.Lat; df.Lat3 = df.Lat; df.columns()
ans =Columns 1 through 7
'Name' 'Zeros' 'Lat' 'Lng' 'Normal' 'Negative' 'GUID'
Columns 8 through 12
'Date' 'Timestamp' 'AlphaNumeric' 'Lat2' 'Lat3'
df.remove_cols({'Lat2', 'Lat3'}); df.columns()
ans =Columns 1 through 7
'Name' 'Zeros' 'Lat' 'Lng' 'Normal' 'Negative' 'GUID'
Columns 8 through 10
'Date' 'Timestamp' 'AlphaNumeric'
methods('DataFrame')
Methods for class DataFrame:DataFrame disp is_column subsref toStruct
addprop getTable numel summary width
columns head remove_cols toArray writetable
details height subsasgn toCellStatic methods:
fromArray fromCell intersect rowfun
fromCSV fromStruct ismember varfunCall "methods('handle')" for methods of DataFrame inherited from handle.