使用熊猫在csv文件中选择值并计算它们

时间:2018-10-22 14:12:58

标签: python pandas

我是编码的新手,对于一个项目,我需要使用熊猫在csv文件中选择值并计算这些值。我想要的是选择两列和多行来计算它们,例如,将一列乘以另一列。我成功地选择了值,但没有计算它们,这就是我所拥有的。

import pandas as pd`
data = pd.read_csv("csvfilet.csv", delimiter=";", decimal=",")
print(data.iloc[57:67, 3])
print(data.iloc[57:67, 7])
data.iloc[57:68, 3] = data.iloc[57:68, 3]*data.iloc[57:68, 7]
print(data.iloc[57:68, 3])

它首先正确地将data.iloc()的两列打印给我,但是看来我做不到,这向我显示了

  

不能将序列乘以'str'类型的非整数   所以我尝试了这个:

import pandas as pd
data = pd.read_csv("csvfilet.csv", delimiter=";", decimal=",")
print(data.iloc[57:67, 3])
print(data.iloc[57:67, 7])
x=data.iloc[57:68, 7:8]
y=data.iloc[57:68, 3:4]
z=x*y
print(z)

,它为我提供了用NaN替换值的两列。 有没有一种方法可以直接在csv文件中计算我们选择的值(按行和列)?

*编辑:我需要在其中提取值的csv文件如下所示:

[Name];[Switching (us)];[Memory (byte)];;;;;;;;;
S1;20,5;;;;;;;;;;
S3;;256;;;;;;;;;
[Name];[Priority];[ArrivalType];[MinDistance (ms)];[MaxDistance (ms)];[SizeType];[Min Size (byte)];[MaxSize (byte)];[BurstSize];[Sender];[Receiver];[Latency (ms)]
FL_1;1;Periodic;5;;ETHERNET_FRAME_SIZE;;100;;Node4;Node6;2
FL_2;1;Periodic;2;;ETHERNET_FRAME_SIZE;;20;;Node3;Node4;1,5

例如,我需要选择FL_1的'5'权限,并将其乘以同一行中的'100'。

1 个答案:

答案 0 :(得分:0)

您可以尝试:

data.iloc[57:68, 3] = (data.iloc[57:68, 3].astype(int).values 
                      * data.iloc[57:68, 7].astype(int).values)

将范围从iloc转换为int并乘以值。

更新

因此,这里的主要问题是您从示例文本中错误地读取了文件,有2种不同的数据结构。在下面的代码中,我使用skiprows删除了不需要的数据。

import pandas as pd
data = pd.read_csv("csvfilet.csv", delimiter=";", decimal=",", skiprows = 3)
print(data.iloc[0, 3])
print(data.iloc[0, 7])

#create a new series in your frame
data['NewMinDistance'] = data['[MinDistance (ms)]'].astype(int) * data['[MaxSize (byte)]'].astype(int)
data[['[Name]','[MinDistance (ms)]','[MaxSize (byte)]','NewMinDistance']]

#or with your earlier method, directly assign it to a dataframe position
data.iloc[0, 3] =   (data.iloc[0, 3].astype(int) * data.iloc[0, 7].astype(int))

您先前的示例使用位置分配,其中您使用iloc将新值直接分配给了数据框。根据您的要求,我在上面的回答还包括使用所需的值创建一个新列,而不是将其分配给数据框中的当前值。