Python can';如果是数据帧,则不分配给函数调用
我有几个列的dataframe。其中一列为“类别”,由字符串组成,如下所示: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
…:-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)
无效,或者您的其他两个赋值无效