我正在尝试做我们的教练给出的虹膜数据集。他编辑了文件并删除了所有花卉类型和列名称。他希望我们根据花瓣的长度和宽度进行计算。我一直在拉我的头发10个小时试图解决这个问题,但是无论我走到哪里都会遇到错误。
首先,我将文件加载到数据框中,然后对两个变量进行十分转换以保存长度和宽度值。后来,我尝试将这些值相乘并将它们存储在一个新的数据框中,其中“size”作为列名。之后,我尝试将新列附加到初始数据帧,以便将其导出到csv。这是我的尝试:
import os
import csv
import matplotlib.pyplot as plt
import numpy
import pandas as pd
df1 = pd.DataFrame.from_csv('Sample.csv', header = 0, index_col = 0)
pl = df1['Petal.Length']
pw = df1['Petal.Width']
df2 = pd.DataFrame({'size':[pl * pw]})
newdata = df1 + df2
print(newdata)
无论csv导出如何,我还想循环遍历文件并根据大小进行计算,假设大小是> 8然后将'Setosa'作为花名称连续写在它旁边,列名为“Flower type”我一直试图找出一种循环数据框并根据其计算创建另一列的方法但我最终没有运气。
以下是教师给我们的一些示例数据:
id,Sepal.Length,Sepal.Width,Petal.Length,Petal.Width
1,5.1,3.5,1.4,0.2
2,4.9,3,1.4,0.2
3,4.7,3.2,1.3,0.2
4,4.6,3.1,1.5,0.2
5,5,3.6,1.4,0.2
6,5.4,3.9,1.7,0.4
7,4.6,3.4,1.4,0.3
8,5,3.4,1.5,0.2
提前感谢。
答案 0 :(得分:2)
您可以直接分配到新列:
df1['size'] = df1['Petal.Length'] * df1['Petal.Width']
print(df1)
输出:
Sepal.Length Sepal.Width Petal.Length Petal.Width size
id
1 5.1 3.5 1.4 0.2 0.28
2 4.9 3.0 1.4 0.2 0.28
3 4.7 3.2 1.3 0.2 0.26
4 4.6 3.1 1.5 0.2 0.30
5 5.0 3.6 1.4 0.2 0.28
6 5.4 3.9 1.7 0.4 0.68
7 4.6 3.4 1.4 0.3 0.42
8 5.0 3.4 1.5 0.2 0.30
为所有尺寸更大的0.3添加Setosa
df1.loc[df1['size'] > 0.3, 'Flower.Type'] = 'Setosa'
print(df1)
输出:
Sepal.Length Sepal.Width Petal.Length Petal.Width size Flower.Type
id
1 5.1 3.5 1.4 0.2 0.28 NaN
2 4.9 3.0 1.4 0.2 0.28 NaN
3 4.7 3.2 1.3 0.2 0.26 NaN
4 4.6 3.1 1.5 0.2 0.30 Setosa
5 5.0 3.6 1.4 0.2 0.28 NaN
6 5.4 3.9 1.7 0.4 0.68 Setosa
7 4.6 3.4 1.4 0.3 0.42 Setosa
8 5.0 3.4 1.5 0.2 0.30 Setosa
您还可以使用多个条件:
df1.loc[(df1['size'] > 0.3) & (df1['size'] < 0.5), 'Flower.Type'] = 'Setosa'
print(df1)
输出:
Sepal.Length Sepal.Width Petal.Length Petal.Width size Flower.Type
id
1 5.1 3.5 1.4 0.2 0.28 NaN
2 4.9 3.0 1.4 0.2 0.28 NaN
3 4.7 3.2 1.3 0.2 0.26 NaN
4 4.6 3.1 1.5 0.2 0.30 Setosa
5 5.0 3.6 1.4 0.2 0.28 NaN
6 5.4 3.9 1.7 0.4 0.68 NaN
7 4.6 3.4 1.4 0.3 0.42 Setosa
8 5.0 3.4 1.5 0.2 0.30 Setosa