使用 pd.read_clipboard 复制数据框时如何处理自定义命名索引?
How to handle custom named index when copying a dataframe using pd.read_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
这显然是错误的。我该如何纠正?
read_clipboard
默认使用空格分隔列。您看到的问题是因为第一列中的空格。如果您指定两个或多个空格作为分隔符,根据 table 格式,它将自己找出索引列:
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,}')
这不像@ayhan 的回答那么酷,但大多数时候效果很好。假设您使用的是 ipython 或 jupyter,只需将数据复制并粘贴到 %%file
:
然后进行一些快速编辑。对于多索引,只需将索引向上移动一行,就像这样(在这种情况下也将 "Constraint ID" 缩短为 "ID" 以节省一点 space):
%%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
通常在像这样的表格内容上工作得很好,正确处理列名中的 spaces(通常)。当然,你也可以用read_csv
.
这个基本方法
此方法的好处在于,对于小样本数据,您可以处理用户 post 此处数据的任何奇怪方式。而且还有很多奇怪的方法。 ;-)
给出这个数据框来自其他一些问题:
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
这显然是错误的。我该如何纠正?
read_clipboard
默认使用空格分隔列。您看到的问题是因为第一列中的空格。如果您指定两个或多个空格作为分隔符,根据 table 格式,它将自己找出索引列:
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,}')
这不像@ayhan 的回答那么酷,但大多数时候效果很好。假设您使用的是 ipython 或 jupyter,只需将数据复制并粘贴到 %%file
:
然后进行一些快速编辑。对于多索引,只需将索引向上移动一行,就像这样(在这种情况下也将 "Constraint ID" 缩短为 "ID" 以节省一点 space):
%%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
通常在像这样的表格内容上工作得很好,正确处理列名中的 spaces(通常)。当然,你也可以用read_csv
.
此方法的好处在于,对于小样本数据,您可以处理用户 post 此处数据的任何奇怪方式。而且还有很多奇怪的方法。 ;-)