pandas - 我的 DataFrame 有一个系列,其中包含应该是浮点数的对象,它们附有“M”、“K”和小数。我如何将它们分开?
问题描述
array(['€110.5M', '€77M', '€118.5M', '€72M', '€102M', '€93M', '€67M',
'€80M', '€51M', '€68M', '€76.5M', '€44M', '€60M', '€63M', '€89M',
'€83.5M', '€78M', '€58M', '€53.5M', '€51.5M', '€38M', '€64.5M',
'€27M', '€81M', '€69.5M', '€59.5M', '€62M', '€73.5M', '€59M',
'€46M', '€43M', '€36M', '€57M', '€24M', '€30M', '€4M', '€64M',
'€30.5M', '€62.5M', '€52M', '€45M', '€34M', '€46.5M', '€61M',
'€41.5M', '€44.5M', '€56.5M', '€53M', '€50M', '€55M', '€36.5M',
'€45.5M', '€43.5M', '€35M', '€39M', '€18M', '€21.5M', '€50.5M',
'€54M', '€40.5M', '€37.5M', '€28.5M', '€37M', '€32M', '€26M',
'€33M', '€38.5M', '€35.5M', '€9M', '€15.5M', '€22M', '€14M',
'€42.5M', '€31.5M', '€42M', '€25M', '€29.5M', '€31M', '€24.5M',
'€27.5M', '€29M', '€16.5M', '€23M', '€19M', '€4.2M', '€40M',
'€41M', '€28M', '€22.5M', '€34.5M', '€32.5M', '€20M', '€26.5M',
'€25.5M', '€21M', '€13M', '€17.5M', '€11.5M', '€8M', '€6M',
'€19.5M', '€6.5M', '€20.5M', '€23.5M', '€18.5M', '€17M', '€12.5M',
'€15M', '€13.5M', '€4.8M', '€3M', '€1.5M', '€16M', '€10M', '€11M',
'€7M', '€14.5M', '€5.5M', '€10.5M', '€4.5M', '€12M', '€ 0',
'€9.5M', '€8.5M', '€2M', '€1.7M', '€1M', '€3.6M', '€7.5M', '€3.8M',
'€5M', '€2.4M', '€2.9M', '€4.7M', '€4.1M', '€2.1M', '€600K',
'€2.7M', '€3.4M', '€2.5M', '€3.2M', '€3.1M', '€4.9M', '€4.3M',
'€2.3M', '€525K', '€3.9M', '€1.8M', '€2.2M', '€4.4M', '€1.6M',
'€900K', '€3.7M', '€3.5M', '€1.9M', '€450K', '€775K', '€650K',
'€750K', '€2.8M', '€1.3M', '€4.6M', '€2.6M', '€1.2M', '€375K',
'€3.3M', '€270K', '€950K', '€550K', '€1.1M', '€975K', '€1.4M',
'€725K', '€425K', '€210K', '€875K', '€675K', '€325K', '€800K',
'€850K', '€160K', '€120K', '€825K', '€925K', '€625K', '€240K',
'€500K', '€575K', '€200K', '€250K', '€700K', '€350K', '€475K',
'€300K', '€70K', '€140K', '€230K', '€400K', '€280K', '€100K',
'€60K', '€260K', '€180K', '€220K', '€50K', '€290K', '€90K',
'€150K', '€40K', '€130K', '€190K', '€170K', '€110K', '€30K',
'€80K', '€20K', '€10K'], dtype=object)
我尝试过使用 str.replace 并手动分隔欧元、M 和 K,但由于句号,它并没有达到预期的效果。有人可以帮忙吗?我发现了类似的问题,但由于小数,这些解决方案不起作用。谢谢!
请在关闭前阅读
这个问题一直被关闭,我一直被转移到一个没有回答这个问题的答案上。
解决方案
IIUC,让我们使用捕获整数或小数extract
的正则表达式prod
,然后将 M 和 K 转换为数字并使用:
arr = np.array(['€110.5M', '€77M', '€118.5M', '€72M', '€102M', '€93M', '€67M',
'€80M', '€51M', '€68M', '€76.5M', '€44M', '€60M', '€63M', '€89M',
'€83.5M', '€78M', '€58M', '€53.5M', '€51.5M', '€38M', '€64.5M',
'€27M', '€81M', '€69.5M', '€59.5M', '€62M', '€73.5M', '€59M',
'€46M', '€43M', '€36M', '€57M', '€24M', '€30M', '€4M', '€64M',
'€30.5M', '€62.5M', '€52M', '€45M', '€34M', '€46.5M', '€61M',
'€41.5M', '€44.5M', '€56.5M', '€53M', '€50M', '€55M', '€36.5M',
'€45.5M', '€43.5M', '€35M', '€39M', '€18M', '€21.5M', '€50.5M',
'€54M', '€40.5M', '€37.5M', '€28.5M', '€37M', '€32M', '€26M',
'€33M', '€38.5M', '€35.5M', '€9M', '€15.5M', '€22M', '€14M',
'€42.5M', '€31.5M', '€42M', '€25M', '€29.5M', '€31M', '€24.5M',
'€27.5M', '€29M', '€16.5M', '€23M', '€19M', '€4.2M', '€40M',
'€41M', '€28M', '€22.5M', '€34.5M', '€32.5M', '€20M', '€26.5M',
'€25.5M', '€21M', '€13M', '€17.5M', '€11.5M', '€8M', '€6M',
'€19.5M', '€6.5M', '€20.5M', '€23.5M', '€18.5M', '€17M', '€12.5M',
'€15M', '€13.5M', '€4.8M', '€3M', '€1.5M', '€16M', '€10M', '€11M',
'€7M', '€14.5M', '€5.5M', '€10.5M', '€4.5M', '€12M', '€ 0',
'€9.5M', '€8.5M', '€2M', '€1.7M', '€1M', '€3.6M', '€7.5M', '€3.8M',
'€5M', '€2.4M', '€2.9M', '€4.7M', '€4.1M', '€2.1M', '€600K',
'€2.7M', '€3.4M', '€2.5M', '€3.2M', '€3.1M', '€4.9M', '€4.3M',
'€2.3M', '€525K', '€3.9M', '€1.8M', '€2.2M', '€4.4M', '€1.6M',
'€900K', '€3.7M', '€3.5M', '€1.9M', '€450K', '€775K', '€650K',
'€750K', '€2.8M', '€1.3M', '€4.6M', '€2.6M', '€1.2M', '€375K',
'€3.3M', '€270K', '€950K', '€550K', '€1.1M', '€975K', '€1.4M',
'€725K', '€425K', '€210K', '€875K', '€675K', '€325K', '€800K',
'€850K', '€160K', '€120K', '€825K', '€925K', '€625K', '€240K',
'€500K', '€575K', '€200K', '€250K', '€700K', '€350K', '€475K',
'€300K', '€70K', '€140K', '€230K', '€400K', '€280K', '€100K',
'€60K', '€260K', '€180K', '€220K', '€50K', '€290K', '€90K',
'€150K', '€40K', '€130K', '€190K', '€170K', '€110K', '€30K',
'€80K', '€20K', '€10K'], dtype=object)
s=pd.Series(arr)
df = s.str.strip('€').str.extract('(\d+\.?\d*)(K|M)').replace({'M':1000000,'K':1000})
df[0] = pd.to_numeric(df[0], errors='coerce')
s_out = df.prod(axis=1)
s_out
输出:
0 110500000.0
1 77000000.0
2 118500000.0
3 72000000.0
4 102000000.0
...
212 110000.0
213 30000.0
214 80000.0
215 20000.0
216 10000.0
Length: 217, dtype: float64
推荐阅读
- css - Scrolling background effect on cards
- amazon-web-services - 如何使用 aws java sdk 检索 accessKeyId、secretAccesskey 和 sessionToken?
- java - Okhttp 如何将 Spring Boot 信任库用于 tls?
- c# - 时间:2019-05-10 标签:c#firestore setup on mac running parallels
- gis - 如何正确地将 GIS shapefile 转换为道路网络?
- python - 星号 * 作为函数/类/方法签名中的第一个参数是什么意思?
- python - python以不同形式打印向量
- operating-system - 如果前一个进程使用 DMA 切换到新进程时操作系统和 DMA 会做什么
- python - 出现错误 403:尽管使用了标头,但仍被禁止。可能出了什么问题?
- javascript - 点击缩略图和滑块的图像预览:如何使点击和滑动协同工作?