我是Python的新手,早些时候发布了我的问题,并收到了其他人的建议,但仍然无法解决我的问题。我将重新发布我的帖子,并进行一些修改,并结合其他人的建议。我不仅是Python的新手,而且在表达问题时也遇到了问题。
我想将所有价格从字符串转换为数字,例如从“ 3K”转换为“ 3000”,以保持数据分析的一致性。目前,K表示千,就足够了,不需要进入数百万或数十亿。
这是在Python数据帧上完成的,我对迭代,列出和遇到我不理解的错误仍然不熟悉。
a)我无法将字符串转换为浮点数。 “ ValueError:无法将字符串转换为浮点数:”
b)然后,我决定转换为字符串,但无法将其作为字符串存储在数据框中。我的输出是空单元格。
import pandas as pd
import numpy as np
import re
def regex_filter(val):
new_price = val
if val:
price = ' '
mo = re.search('\d+[kK]',val)
if mo:
price = str(price).replace('K','000')
print("The New value is ",price)
new_price = price
return new_price
else:
return new_price
else:
return new_price
if __name__ == "__main__":
df = pd.read_csv('ProductID_price.csv', encoding='utf8')
df['price'] = df['price'].apply(regex_filter)
输入
product_id product_name price
0 1 Mares XR Kevlar Diving Dry Suit 3K
1 2 Beuchat Abyss Dry Diving Dry Suit 2050
2 3 Typhoon Scuba Dive Dry Suit 1.5K
3 4 Scubapro Evertech Drysuit Men 4,059.99
输出
product_id product_name price
0 1 Mares XR Kevlar Diving Dry Suit
1 2 Beuchat Abyss Dry Diving Dry Suit 2050
2 3 Typhoon Scuba Dive Dry Suit
3 4 Scubapro Evertech Drysuit Men 4,059.99
答案 0 :(得分:0)
我将按照以下步骤进行操作:
Bookshelf
示例:
def conv(s, conv_from="K", conv_to=1000):
return s.mask(
s.str.contains(f"\d+{conv_from}", na=False),
pd.to_numeric(s.str.replace(conv_from,""),
errors="coerce") * conv_to,
errors="ignore")
# get rid of commas and spaces
df["price"] = df["price"].str.replace(r"[\s,]", "")
df["price"] = df["price"].pipe(conv, "[Kk]", 10**3).pipe(conv, "[Mm]", 10**6)
解决方案:
In [96]: df
Out[96]:
price
0 3K
1 0.56M
2 2050
3 1.5K
4 4,059.99
结果:
In [97]: df["price"] = df["price"].str.replace(r"[\s,]", "")
In [98]: df["price"] = df["price"].pipe(conv, "[Kk]", 10**3).pipe(conv, "[Mm]", 10**6)