使用pd.read_clipboard复制数据帧时如何处理自定义命名索引?

时间:2017-08-17 02:00:39

标签: python pandas dataframe clipboard

考虑到其他问题的数据框架:

         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

这显然是错误的。我怎么能纠正这个?

2 个答案:

答案 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一起使用。

这种方法的优点在于,对于小样本数据,您可以处理用户在此处发布数据的任何奇怪方式。并且有很多奇怪的方式。 ; - )