This is a real problem I\'ve faced for a long time.
Take this dataframe:
A B THRESHOLD
NaN NaN NaN
-0.041158 -0.16
Using re
, io
and pd.read_table
to drive the point I was making in the comments, I copied the exact text you have in the post, applied a first round of re.sub
to remove any leading whitespace. Then, I replaced any space that is preceded by a number--this is unique to the case at hand since the column names are mostly string characters--with 2 spaces. Once all that is done, I converted the resulting string into an io.StringIO
object and fed the latter to the pd.read_table
function. This essentially the same thing as copying the text and pasting it in sublime text
, and then applying to search and replace operations before you finally copy the resulting string and feed it to pd.read_clipboard
.
The following snippet of code illustrates the point:
import pandas as pd
import re
import io
text = """ A B Col #3
NaN NaN NaN
-0.041158 -0.161571 0.329038
0.238156 0.525878 0.110370
0.606738 0.854177 -0.095147
0.200166 0.385453 0.166235"""
with io.StringIO(re.sub("(?<=[0-9]) +", " ", re.sub("^ +", "", text))) as fs:
df = pd.read_table(fs, header=0, sep="\s{2,}",engine='python')
# A B Col #3
# 0 NaN NaN NaN
# 1 -0.041158 -0.161571 0.329038
# 2 0.238156 0.525878 0.110370
# 3 0.606738 0.854177 -0.095147
# 4 0.200166 0.385453 0.166235
Thanks for asking the question.