我有以下数据
Description
4 GB+ 2 GB Night 3G/2G Data
Unlimited Local & STD Calls + 500 MB 3G/2G Data (T&C apply)
9GB + 8GB night data+ 6GB next night data
8 GB data 4G
我想要的是提取大量数据(4GB 等)并将它们合并到单个列中
df2=df['Description'].str.extract('([0-9]+(\.[0-9][0-9]?)?\s?GB|[0-9]+(\.[0-9][0-9]?)?\s?MB)')
我也使用过pandas函数extractall()
,但是extract
和extractall()
都给了我这样的结果
0 1 2
4GB Nan Nan #2 gb is missing
500MB Nan Nan
9GB Nan Nan # 8gb 6 gb is missing
8Gb Nan Nan
我哪里错了? 此外,当将行与 df.fillna(' ') 组合时,我得到这样的输出
0
4GB,2GB,
500MB, ,
9GB,8GB,6GB
8GB, ,
虽然我想要的是
0
4GB,2GB
500MB
9GB,8GB,6GB
8GB
我不需要空格。pandas 有没有办法获取上述格式的数据?我是python初学者,不知道如何实现这一点。如果有其他方法请提及。
编辑:
这是完整的代码:
df2=df['Description'].str.extractall('([0-9]+(\.[0-9][0-9]?)?\s?GB|[0- 9]+(\.[0-9][0-9]?)?\s?MB)')
#print df2
df2[1].fillna("",inplace=True);
df2[2].fillna("",inplace=True)
print df2
df3=df2[0]+','+df2[1]+','+df2[2];
print df3
最佳答案
使用 extractall 应该像下面这样工作:
df.Description.str\
.extractall('(\d*\s?[GM]B)').groupby(level=0)\
.apply(lambda x: ','.join(x[0])\
.replace(' ',''))
Out[75]:
0 4GB,2GB
1 500MB
2 9GB,8GB,6GB
3 8GB
dtype: object
关于python - 如何在 pandas 中多次提取字符串中存在的单个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44544731/