diff --git a/src/DataFrame-Tests/DataFrameTest.class.st b/src/DataFrame-Tests/DataFrameTest.class.st index 8e6a58c2..2316c277 100644 --- a/src/DataFrame-Tests/DataFrameTest.class.st +++ b/src/DataFrame-Tests/DataFrameTest.class.st @@ -5133,6 +5133,19 @@ DataFrameTest >> testToColumnsAtApplyElementwise [ self assert: df equals: expected ] +{ #category : #tests } +DataFrameTest >> testToMarkdown [ + + | expectedString | + expectedString := '| # | City | Population | BeenThere | +| --- | ----------- | ---------- | --------- | +| ''A'' | ''Barcelona'' | 1.609 | true | +| ''B'' | ''Dubai'' | 2.789 | true | +| ''C'' | ''London'' | 8.788 | false | +'. + self assert: df toMarkdown equals: expectedString +] + { #category : #tests } DataFrameTest >> testTransposed [ diff --git a/src/DataFrame/DataFrame.class.st b/src/DataFrame/DataFrame.class.st index 5ac0c83e..6d209d56 100644 --- a/src/DataFrame/DataFrame.class.st +++ b/src/DataFrame/DataFrame.class.st @@ -2259,6 +2259,52 @@ DataFrame >> toColumnsAt: arrayOfColumnNumbers applyElementwise: aBlock [ self toColumnAt: each applyElementwise: aBlock ] ] +{ #category : #converting } +DataFrame >> toMarkdown [ + " Prints the DataFrame as a Markdown formatted table" + + | markdown columnWidths dataFrame | + dataFrame := self copy. + dataFrame addColumn: dataFrame rowNames named: '#' atPosition: 1. + markdown := WriteStream on: String new. + markdown nextPutAll: '| '. + + columnWidths := dataFrame columnNames collect: [ :columnName | + | maxWidth | + maxWidth := columnName size. + dataFrame rows do: [ :row | + | value | + value := row at: columnName. + maxWidth := maxWidth max: value printString size ]. + maxWidth ]. + + dataFrame columnNames withIndexDo: [ :columnName :index | + | paddedColumnName | + paddedColumnName := columnName padRightTo: (columnWidths at: index). + markdown nextPutAll: paddedColumnName , ' | ' ]. + markdown cr. + markdown nextPutAll: '| '. + + columnWidths do: [ :width | + | secondRow | + secondRow := '-'. + width - 1 timesRepeat: [ secondRow := secondRow , '-' ]. + markdown nextPutAll: secondRow , ' | ' ]. + + markdown cr. + + dataFrame asArrayOfRows do: [ :row | + markdown nextPutAll: '| '. + row withIndexDo: [ :value :index | + | paddedValue | + paddedValue := value printString padRightTo: + (columnWidths at: index). + markdown nextPutAll: paddedValue , ' | ' ]. + markdown cr ]. + + ^ markdown contents +] + { #category : #geometry } DataFrame >> transposed [ "Returns a transposed DataFrame. Columns become rows and rows become columns."