给出数据框line
:
data = [[10, 10, 10,10,10,10,10,10], [10, 10, 10,10,10,10,10,10], [10, 10, 10,10,10,10,10,10]]
line = pd.DataFrame(data, columns = ['0', '0.1','1', '1.1','2', '2.1','3', '3.1'])
line
我到目前为止所做的:
border_1 = line[['2','2.1']]
border_1 = border_1.rename(columns={'2': 'longitude', '2.1': 'latitude'})
border_1 = border_1.dropna()
我是用[['2','2.1']]
做的。现在,我想对每对夫妇从0 0.1 1 1.1开始,依此类推,以得到border_1
如何应用于整个数据框架?
cols = line.columns.tolist()
for i in range(0, len(cols), 2):
border_1 = line[cols[i], cols[i+1]]
border_1 = border_1.rename(columns={cols[i]: 'longitude', cols[i+i]: 'latitude'})
border_1 = border_1.dropna()
KeyError: ('0', '0.1')
答案 0 :(得分:0)
您有两个语法错误:
首先,要获取多个列,您需要将它们用作列表:
for i in range(0, len(cols), 2):
border_1 = line[[cols[i], cols[i+1]]]
第二,一个简单的错字,但是cols[i+i]
很快超出了范围。
border_1 = border_1.rename(columns={cols[i]: 'longitude', cols[i+1]: 'latitude'})
答案 1 :(得分:0)
cols = (
pd.MultiIndex.from_tuples([
tuple(map(int, (x + '.0').split('.')[:2]))
for x in line.columns
]).set_levels(['longitude', 'latitude'], level=1)
)
border = pd.DataFrame({c: v for c, (k, v) in zip(cols, line.iteritems())})
border
0 1 2 3
longitude latitude longitude latitude longitude latitude longitude latitude
0 10 10 10 10 10 10 10 10
1 10 10 10 10 10 10 10 10
2 10 10 10 10 10 10 10 10