【发布时间】:2020-07-18 16:20:01
【问题描述】:
有时我的 DataFrame 中的字符串数字中有逗号,表示十进制或标记千位,有些则没有。数据框是我通过 API 收到的价格格式范围的一个示例,并且取决于货币。这些是价格,小数点始终为 2。所以我需要将字符串价格输出到浮点数中,这样我就可以将它们相加或将它们分离到其他数据框中或使用它们来绘制图表。我已经创建了一个循环来替换它们,但是没有循环有没有更快的方法来做到这一点?
我的DataFrame和工作循环如下:
data = {'amount': ['7,99', '6,99', '9.99', '-6,99', '1,000.00']}
df = pd.DataFrame(data)
fees = []
sales = []
for items in df['amount']:
if items[-7:-6] == ',':
items = float(items.replace(',', '').replace(' ',''))
if items[-3:-2] == ',':
items = float(items.replace(',', '.').replace(' ',''))
items = float(items)
if items <= 0:
fees.append(items)
else:
sales.append(items)
我试图在没有循环的情况下执行此操作,但似乎无法找出我出错的地方。
df["amount"] = np.where((df['amount'][-7:-6] == ','),
df["amount"][-7:-6].str.replace(',', '').replace(' ',''),
df["amount"])
df["amount"] = np.where((df['amount'][-3:-2] == ','),
df["amount"][-3:-2].str.replace(',', '').replace(' ',''),
df["amount"])
任何帮助将不胜感激。提前谢谢你
【问题讨论】:
-
你的预期输出是什么?
-
好问题是这些错误的数字表示是从哪里来的。您可以尝试在数据框中修复它,但是您将如何猜测字符串
'1,234'是否是整数值 @987654324 @(逗号作为千位分隔符)还是小数1.234(逗号作为小数分隔符)? -
感谢 cmets 并为我没有解释这些数字的来源表示歉意。这些是价格,小数点始终为 2。所以我需要将字符串价格输出为浮点数,这样我就可以将它们相加或将它们分开以用于其他数据帧或将它们绘制成图表。
标签: python pandas dataframe replace conditional-statements