考虑到其他问题的数据框架:
Constraint Name TotalSP Onpeak Offpeak
Constraint_ID
77127 aaaaaaaaaaaaaaaaaa -2174.5 -2027.21 -147.29
98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62 0
1049 cccccccccccccccccc -1036.53 -886.77 -149.76
似乎有一个索引Constraint_ID
。当我尝试用pd.read_clipboard
读取它时,这是它加载的方式:
Constraint Name TotalSP Onpeak Offpeak
0 Constraint_ID NaN NaN NaN NaN
1 77127 aaaaaaaaaaaaaaaaaa -2174.50 -2027.21 -147.29
2 98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62 0.00
3 1049 cccccccccccccccccc -1036.53 -886.77 -149.76
这显然是错误的。我怎么能纠正这个?
答案 0 :(得分:5)
read_clipboard
使用空格来分隔列。您看到的问题是因为第一列中的空格。如果指定两个或多个空格作为分隔符,则根据表格式,它将找出索引列本身:
df = pd.read_clipboard(sep='\s{2,}')
df
Out:
Constraint Name TotalSP Onpeak Offpeak
Constraint_ID
77127 aaaaaaaaaaaaaaaaaa -2174.50 -2027.21 -147.29
98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62 0.00
1049 cccccccccccccccccc -1036.53 -886.77 -149.76
index_col
参数也可用于告诉pandas第一列是索引,以防单独从分隔符推断出结构:
df = pd.read_clipboard(index_col=0, sep='\s{2,}')
答案 1 :(得分:2)
这并不像@ ayhan的答案那么酷,但大部分时间效果都不错。假设您使用的是ipython或jupyter,只需将数据复制并粘贴到%%file
:
然后做一些快速编辑。使用多索引,只需将索引向上移动一行,就像这样(也缩短"约束ID"到" ID"在这种情况下节省一点空间):
%%file foo.txt
ID Constraint Name TotalSP Onpeak Offpeak
77127 aaaaaaaaaaaaaaaaaa -2174.5 -2027.21 -147.29
98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62 0
1049 cccccccccccccccccc -1036.53 -886.77 -149.76
pd.read_fwf('foo.txt')
Out[338]:
ID Constraint Name TotalSP Onpeak Offpeak
0 77127 aaaaaaaaaaaaaaaaaa -2174.50 -2027.21 -147.29
1 98333 bbbbbbbbbbbbbbbbbb -1180.62 -1180.62 0.00
2 1049 cccccccccccccccccc -1036.53 -886.77 -149.76
read_fwf
通常可以很好地处理像这样的表格,正确处理列名中的空格(通常)。当然,您也可以将此基本方法与read_csv
一起使用。
这种方法的优点在于,对于小样本数据,您可以处理用户在此处发布数据的任何奇怪方式。并且有很多奇怪的方式。 ; - )