我是编码的新手,对于一个项目,我需要使用熊猫在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'。
答案 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
将新值直接分配给了数据框。根据您的要求,我在上面的回答还包括使用所需的值创建一个新列,而不是将其分配给数据框中的当前值。