写一个python代码,要求从一个数据集提取出来多个子表,通过观察第18列的数值进行提取。提取规则是第18列的数据一旦大于5即开始提取,若子表内第18列数据出现递减情况则自动跳入下一个字表的提取中
时间: 2023-08-31 19:29:36 浏览: 98
fer2013数据集和提取出的数据集图片以及python提取代码
5星 · 资源好评率100%
### 回答1:
import pandas as pd # 导入原始数据集
data = pd.read_csv('original_data.csv')
# 创建存储每个子表的列表
tables = []
# 初始化子表的索引
table_index = -1
# 遍历原始数据集的每一行
for i in range(0, data.shape[0]):
# 获取当前行的第18列的数值
value = data.iloc[i][17]
# 如果第18列的数值大于5则开始提取新的子表
if value > 5:
table_index += 1
tables.append([])
# 将当前行的数据添加到对应的子表中
tables[table_index].append(data.iloc[i])
# 如果子表内第18列数据出现递减情况则自动跳入下一个字表的提取中
if i < data.shape[0] - 1 and data.iloc[i][17] > data.iloc[i + 1][17]:
table_index += 1
tables.append([])
# 将每个子表转换成DataFrame格式
for i in range(0, len(tables)):
tables[i] = pd.DataFrame(tables[i])
# 打印出每个子表的信息
for i in range(0, len(tables)):
print('子表{}的信息:'.format(i + 1))
print(tables[i])
### 回答2:
可以使用Python的pandas库来处理数据集。假设数据集已存储在csv文件中,可以使用以下代码实现要求:
```python
import pandas as pd
# 读取数据集
data = pd.read_csv('dataset.csv')
# 初始化字表列表
sub_tables = []
# 初始化当前子表
current_sub_table = pd.DataFrame()
# 遍历数据集
for index, row in data.iterrows():
# 提取第18列的数值
value = row[17]
# 如果数值大于5,则将该行数据加入当前子表
if value > 5:
current_sub_table = current_sub_table.append(row)
# 如果当前子表非空且第18列数值出现递减情况,则将当前子表保存并重新初始化一个新的子表
elif not current_sub_table.empty and value < current_sub_table.iloc[-1][17]:
sub_tables.append(current_sub_table)
current_sub_table = pd.DataFrame()
# 将最后一个子表保存
if not current_sub_table.empty:
sub_tables.append(current_sub_table)
# 输出提取的子表数量
print("共提取出", len(sub_tables), "个子表。")
# 输出每个子表的行数
for i, sub_table in enumerate(sub_tables):
print("子表", i+1, "的行数为", len(sub_table))
```
以上代码创建一个空的`current_sub_table`作为当前子表,遍历数据集,判断第18列数值是否大于5,如果是则将该行数据加入当前子表。如果当前子表非空且第18列数值出现递减情况,则将当前子表保存,并重新初始化一个新的子表。遍历完成后,将最后一个子表保存。最后,输出提取的子表数量以及每个子表的行数。
请将代码中的`'dataset.csv'`替换为实际的数据集文件路径,并根据需要进行其他必要的调整。
阅读全文