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

2024-09-30 02:33:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新的编码和需要,为一个项目,选择一个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])

它首先用数据.iloc(),但似乎我做不到这一点它告诉我:

can't multiply sequence by non-int of type 'str' so i tried this:

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

例如,我需要选择flu 1右边的'5'并将它乘以同一行上的'100'。你知道吗


Tags: 文件csvimportpandasreaddataasbyte
1条回答
网友
1楼 · 发布于 2024-09-30 02:33:54

你能试试吗:

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

将范围从iloc转换为类型int,然后将值相乘。你知道吗

更新

所以这里的主要问题是您错误地读取了文件,从示例文本中,有两种不同的数据结构。在下面的代码中,我使用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直接将新值赋给数据帧。根据您的需求,我上面的回答还包括创建一个包含所需值的新列,而不是将其分配给数据帧中的当前值。你知道吗

相关问题 更多 >

    热门问题