我有一个flask应用程序,在那里我可以获取数据并转换为熊猫数据帧。
if request.method == 'PUT':
content = request.get_json(silent=True)
df = pd.DataFrame.from_dict(content)
for index, row in df.iterrows():
if row["label"] == True:
row['A'] = row['B'] / row['C']
elif row["label"] == False:
row['A'] = row["B"]
if row['D'] == 0:
row['C'] = 0
else:
...我在这里尝试做的是简单的算术,比如加、减和除。
我之所以使用iterrows(),主要是因为我需要多个值来迭代并对特定行值执行计算。df['..'].item()在我的用例中不起作用。
加法和减法可以很好地工作,但除法似乎不知何故漏掉了,总是返回像0、-1、1这样的值
示例计算
row['A'] = row['B'] / row['C']
大多数情况下,row['B']的值都小于row['C']。示例值
row['A'] = 1232455 / 26719856
该应用程序中涉及的唯一计算是加法,减法和除法。
发布于 2019-02-27 17:47:08
你可以试试这个(下面是一个例子):
import pandas as pd
import numpy as np
data = {'label': [True, False, True, True, False],
'A': [2012, 2012, 2013, 2014, 2014],
'B': [4, 24, 31, 21, 3],
'C': [25, 94, 57, 62, 70],
'D': [3645, 0, 27, 24, 96]}
df = pd.DataFrame(data)您可以直接在主Dataframe上应用您的更改,而无需每次都迭代每一行,如下所示:
# select only rows with label == True and apply the division function
df.loc[df.label == True, 'A'] = df['B']/df['C']
df.loc[df.label == False, 'A'] = df['B']
df.loc[np.logical_and(df.label == False, df.D == 0), 'C'] = 0
.
.
.您可以选择每次要更改的行,并将更改直接应用于其上。就像我一样。
另一点:在我的示例中应用除法之后,整数被转换为float64,您可以在您的示例中尝试使用函数series.astype('flat64')
对于row['A'] = 1232455 / 26719856,您将得到0.046125,而不仅仅是整数部分的0。
也许这将使你在做除法运算时不必每次都有零。
https://stackoverflow.com/questions/54901486
复制相似问题