gpt4 book ai didi

python - 匹配 python pandas 元组中的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 15:06:34 25 4
gpt4 key购买 nike

我想通过 if-else 循环来匹配正则表达式,就像 python pandas 中的这样:

 df=pd.read('XYZ.csv');
Total_Data=df['Description'].str.extract(r'([0-9]+(\.[0-9][0-9]?)?\sGB|[0-9]+(\.[0-9][0-9]?)?\s?MB)')[0];
df['Total_Data']=Total_Data.str.extract(r'([0-9]{1,4})')

for row in Total_Data.iteritems() :
print (type(row))
if row.str.contains(r'((?i)MB)'):
df['Total_Data']=df['Total_Data']/1000;

现在我知道这里出了什么问题 contains() 是针对 pandas 中的系列。但是那么我应该如何迭代 Total_Data 中的行,以便如果 MB 单词存在于Total_Data,我可以将其转换为 GB。我想检查此正则表达式并将那些以 MB 为单位的元组数据转换为 GB编辑:

我的数据子集:

09       NaN
10 NaN
11 NaN
12 NaN
13 300 MB
14 NaN
15 NaN
16 NaN
17 80 MB
18 125 MB
19 200 MB
20 1 GB
21 250 MB
22 400 MB
23 350 MB
24 2 GB
25 500 MB
26 1 GB
27 1 GB

最佳答案

正则表达式版本

首先定义要应用的函数,然后应用。如果您明显希望对输出进行任何更改,请更改函数的返回值。

df = pd.DataFrame()
df['Total_Data'] = [np.nan, np.nan, '300MB', '200 MB', '1 GB']

def process_row(row):
match = re.match('^(\d+)\s*(MB)',str(row))
if match:
return str(int(match.group(1)) / 1000) + " GB"
else:
return row

df['Total_Data'] = df['Total_Data'].apply(process_row)

Total_Data
0 NaN
1 NaN
2 0.3 GB
3 0.2 GB
4 1 GB

“ Pandas ”版本

这对数据框做了一些更改。

首先让我们用空字符串或任何东西替换 NaN 以简化生活。

df['Total_Data'].fillna('0 None', inplace=True)

然后拆分一列,因为看起来您有一个空格分隔的值。

foo = lambda x: pd.Series([i for i in x.split(' ')])   
df[['value', 'unit']] = df['Total Data'].apply(foo)
df['value'] = df['value'].astype('int')

你会得到类似的东西:

Total Data  value  unit
0 0 None 0 None
1 0 None 0 None
2 80 MB 80 MB
3 200 MB 200 MB
4 2 GB 2 GB
5 1 GB 1 GB

剩下的就简单了。获取要更改的条目的索引并相应地更新它们。

idx = df.loc[df['unit'] == 'MB'].index
df.loc[idx, 'value'] = df['value'] / 1000
df.loc[idx, 'unit'] = 'GB'

关于python - 匹配 python pandas 元组中的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44604317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com