Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python can';如果是数据帧,则不分配给函数调用_Python_Pandas - Fatal编程技术网

Python can';如果是数据帧,则不分配给函数调用

Python can';如果是数据帧,则不分配给函数调用,python,pandas,Python,Pandas,我有几个列的dataframe。其中一列为“类别”,由字符串组成,如下所示: …:-U校园-U斯蒂文杜-l h_数据=4G,h_rt=86400,h_vmem=4G-pe单体1:… 在category字段中,我需要提取h_数据data,将值转换为千兆字节(参见下面的说明),并将其设置为一个新列。 如果h_data的值以“G”或“G”结尾,则数据以“千兆字节”为单位。如果该值以“m”或“m”结尾,则数据以兆字节为单位。 例如,如果类别字段具有h_data=2048M、h_rt=86400、excl

我有几个列的dataframe。其中一列为“类别”,由字符串组成,如下所示:
…:-U校园-U斯蒂文杜-l h_数据=4G,h_rt=86400,h_vmem=4G-pe单体1:…

在category字段中,我需要提取
h_数据
data,将值转换为千兆字节(参见下面的说明),并将其设置为一个新列。 如果
h_data
的值以
“G”
“G”
结尾,则数据以“千兆字节”为单位。如果该值以
“m”
“m”
结尾,则数据以兆字节为单位。 例如,如果类别字段具有
h_data=2048M、h_rt=86400、exclusive=TRUE
,则提取2048M,并将其转换为2048/1024=2(GB)

我是这样做的:

match = re.search('(h_data=(\d{1})([G|M]))', str(df.category))
if match.group(3) == 'G': # h_data in GB, no convertion
     df('h_data') = match.group(2)
elif match.group(3) == 'M': # h_data in MB, convert it to GB
    df('h_data') = str(float(match.group(2))/1024)
else:   # h_data in KB, convert it to GB
     df('h_data') = float(match.group(2))/1048576
但是我得到了
语法错误:无法分配给函数调用。

我的错误在哪里?

我想您应该使用str.extract:

In [11]: df
Out[11]:
  h_data
0   123G
1   456M
2    789

In [12]: res = df.h_data.str.extract('(\d+)([G|M]?)')

In [13]: res[0] = res[0].astype(int)

In [14]: res
Out[14]:
     0  1
0  123  G
1  456  M
2  789
现在,您可以使用where适当地乘以数字:

In [15]: res[0].where(res[1] == 'G', (res[0] / 1024).where(res[1] == 'M', res[0] / 1048576))
Out[15]:
0    123.000000
1      0.445312
2      0.000752
Name: 0, dtype: float64
注意:您也可以在此处使用应用程序

In [21]: def normalize(row):
    ...:     if row[1] == "G":
    ...:         return row[0]
    ...:     elif row[1] == "M":
    ...:         return row[0] / 1024.
    ...:     else:
    ...:         assert not row[1]
    ...:         return row[0] / 1048576.
    ...:

In [22]: res.apply(normalize, axis=1)
Out[22]:
0    123.000000
1      0.445312
2      0.000752
dtype: float64

你看过文件了吗?具体来说,关于如何访问列的部分在Python中是无效的语法。因此
df('h_data')=match.group(2)
无效,或者您的其他两个赋值无效