英文:
create two sets of a dataframe
问题
我想创建两组数据框,通过删除两行(忽略NA值)。这两行应存储在一个新数据框中,并从原始数据框中删除。然后提取下面的两行(无重叠)以及:
# 数据框
x y ID
39.54 116.39 ID1
38.27 117.26 ID2
28.27 119.55 ID3
27.34 119.43 ID4
NA NA ID5
30.17 109.28 ID6
9.083333333 39.08333333 ID7
NA NA ID8
NA NA ID9
NA NA ID10
### 第一组
# 训练
x y ID
28.27 119.55 ID3
27.34 119.43 ID4
NA NA ID5
30.17 109.28 ID6
9.083333333 39.08333333 ID7
NA NA ID8
NA NA ID9
NA NA ID10
# 验证
x y ID
39.54 116.39 ID1
38.27 117.26 ID2
### 第二组
# 训练
x y ID
39.54 116.39 ID1
38.27 117.26 ID2
NA NA ID5
30.17 109.28 ID6
9.083333333 39.08333333 ID7
NA NA ID8
NA NA ID9
NA NA ID10
# 验证
x y ID
28.27 119.55 ID3
27.34 119.43 ID4
### 第三组
# 训练
x y ID
39.54 116.39 ID1
38.27 117.26 ID2
28.27 119.55 ID3
27.34 119.43 ID4
NA NA ID5
NA NA ID8
NA NA ID9
NA NA ID10
# 验证
x y ID
30.17 109.28 ID6
9.083333333 39.08333333 ID7
如何分割数据框以始终提取两行?
英文:
I want to create two sets of a dataframe by removing two rows (ignoring the NA values). The two rows should be stored in a new dataframe and should be removed from the original dataframe. Then the next two rows (without overlap) and the on:
# Dataframe
x y ID
39.54 116.39 ID1
38.27 117.26 ID2
28.27 119.55 ID3
27.34 119.43 ID4
NA NA ID5
30.17 109.28 ID6
9.083333333 39.08333333 ID7
NA NA ID8
NA NA ID9
NA NA ID10
### First set
# Training
x y ID
28.27 119.55 ID3
27.34 119.43 ID4
NA NA ID5
30.17 109.28 ID6
9.083333333 39.08333333 ID7
NA NA ID8
NA NA ID9
NA NA ID10
#Validation
x y ID
39.54 116.39 ID1
38.27 117.26 ID2
### Second set
# Training
x y ID
39.54 116.39 ID1
38.27 117.26 ID2
NA NA ID5
30.17 109.28 ID6
9.083333333 39.08333333 ID7
NA NA ID8
NA NA ID9
NA NA ID10
#Validation
x y ID
28.27 119.55 ID3
27.34 119.43 ID4
### Third set
# Training
x y ID
39.54 116.39 ID1
38.27 117.26 ID2
28.27 119.55 ID3
27.34 119.43 ID4
NA NA ID5
NA NA ID8
NA NA ID9
NA NA ID10
#Validation
x y ID
30.17 109.28 ID6
9.083333333 39.08333333 ID7
How can I split the dataframes to extract always two rows?
答案1
得分: 2
使用DataFrame.dropna
首先删除缺失值并提取index
,然后按子索引循环并从原始DataFrame
中删除train
,并选择validation
:
# 如果需要,将字符串'NA'替换为NaN
df = df.replace('NA', np.nan)
idx = df.dropna(subset=['x','y']).index
for x in range(0, len(idx), 2):
train = df.drop(idx[x:x+2])
validation = df.loc[idx[x:x+2]]
print (train)
print (validation)
x y ID
2 28.270000 119.550000 ID3
3 27.340000 119.430000 ID4
4 NaN NaN ID5
5 30.170000 109.280000 ID6
6 9.083333 39.083333 ID7
7 NaN NaN ID8
8 NaN NaN ID9
9 NaN NaN ID10
x y ID
0 39.54 116.39 ID1
1 38.27 117.26 ID2
x y ID
0 39.540000 116.390000 ID1
1 38.270000 117.260000 ID2
4 NaN NaN ID5
5 30.170000 109.280000 ID6
6 9.083333 39.083333 ID7
7 NaN NaN ID8
8 NaN NaN ID9
9 NaN NaN ID10
x y ID
2 28.27 119.55 ID3
3 27.34 119.43 ID4
x y ID
0 39.54 116.39 ID1
1 38.27 117.26 ID2
2 28.27 119.55 ID3
3 27.34 119.43 ID4
4 NaN NaN ID5
7 NaN NaN ID8
8 NaN NaN ID9
9 NaN NaN ID10
x y ID
5 30.170000 109.280000 ID6
6 9.083333 39.083333 ID7
请注意,这是代码的翻译部分,没有其他内容。
英文:
Remove missing values byDataFrame.dropna
first and extract index
, then loop by subindices and remove from original DataFrame
for train
and select for validation
:
#if necessary replace strings `NA` to `NaN`s
df = df.replace('NA', np.nan)
idx = df.dropna(subset=['x','y']).index
for x in range(0, len(idx), 2):
train = df.drop(idx[x:x+2])
validation = df.loc[idx[x:x+2]]
print (train)
print (validation)
x y ID
2 28.270000 119.550000 ID3
3 27.340000 119.430000 ID4
4 NaN NaN ID5
5 30.170000 109.280000 ID6
6 9.083333 39.083333 ID7
7 NaN NaN ID8
8 NaN NaN ID9
9 NaN NaN ID10
x y ID
0 39.54 116.39 ID1
1 38.27 117.26 ID2
x y ID
0 39.540000 116.390000 ID1
1 38.270000 117.260000 ID2
4 NaN NaN ID5
5 30.170000 109.280000 ID6
6 9.083333 39.083333 ID7
7 NaN NaN ID8
8 NaN NaN ID9
9 NaN NaN ID10
x y ID
2 28.27 119.55 ID3
3 27.34 119.43 ID4
x y ID
0 39.54 116.39 ID1
1 38.27 117.26 ID2
2 28.27 119.55 ID3
3 27.34 119.43 ID4
4 NaN NaN ID5
7 NaN NaN ID8
8 NaN NaN ID9
9 NaN NaN ID10
x y ID
5 30.170000 109.280000 ID6
6 9.083333 39.083333 ID7
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论