Python Dataframe计算列不返回数值
我有一个数据帧(df),头部看起来像:Python Dataframe计算列不返回数值,python,pandas,Python,Pandas,我有一个数据帧(df),头部看起来像: Quarter Body Total requests Requests on-hold Total requests received (excluding on-hold) 1 2019_Q3 A 93 5 2 2019_Q3 B 228 2 3 2019_Q3 C
Quarter Body Total requests Requests on-hold Total requests received (excluding on-hold)
1 2019_Q3 A 93 5
2 2019_Q3 B 228 2
3 2019_Q3 C 180 7
4 2019_Q3 D 31 3
5 2019_Q3 E 555 0
每个字段的类型为:
df.dtypes
Quarter object
Body object
Total requests object
Requests Processed object
Requests on-hold object
Total requests received (excluding on-hold) float64
我正在尝试计算总请求数-保留请求数
并将结果插入列中收到的总请求数(不包括保留请求)
,因此我希望的输出如下所示:
Quarter Body Total requests Requests on-hold Total requests received (excluding on-hold)
1 2019_Q3 A 93 5 88
2 2019_Q3 B 228 2 226
3 2019_Q3 C 180 7 173
4 2019_Q3 D 31 3 28
5 2019_Q3 E 555 0 555
我正在尝试使用以下方法创建接收到的总请求(不包括保留)colum数据:
df['Total requests received (excluding on-hold)'] = df['Total requests'] - df['Requests on-hold']
但是我得到的是每个条目的NaN
,而不是一个值
Quarter Body Total requests Requests on-hold Total requests received (excluding on-hold)
1 2019_Q3 A 93 5 NaN
2 2019_Q3 B 228 2 NaN
3 2019_Q3 C 180 7 NaN
4 2019_Q3 D 31 3 NaN
5 2019_Q3 E 555 0 NaN
我注意到Total requests和requests on hold的类型是object,所以我尝试使用
df["Total requests"] = pd.to_numeric(df["Total requests"])
df["Requests on-hold"] = pd.to_numeric(df["Requests on-hold"])
没有成功。我如何解决这个问题
注意:当我添加以下代码以转换为数值时(在计算之前):
我收到错误消息:
df["Total requests"] = pd.to_numeric(df["Total requests"])
File "C:\Anaconda_Python 3.7\2019.03\lib\site-packages\pandas\core\tools\numeric.py", line 122, in to_numeric
raise TypeError('arg must be a list, tuple, 1-d array, or Series')
TypeError: arg must be a list, tuple, 1-d array, or Series
它似乎有一些拖拉空白,所以请尝试通过
剥离来删除它:
df["Total requests"] = pd.to_numeric(df["Total requests"].str.strip())
df["Requests on-hold"] = pd.to_numeric(df["Requests on-hold"].str.strip())
如果可能的话,先将一些带有尾随值的非数值剥离
,然后添加参数errors='concurve'
,以便将它们转换为NaN
s:
df["Total requests"] = pd.to_numeric(df["Total requests"].str.strip(), errors='coerce')
df["Requests on-hold"] = pd.to_numeric(df["Requests on-hold"].str.strip(), errors='coerce')
如果不是尾随空格:
df["Total requests"] = pd.to_numeric(df["Total requests"], errors='coerce')
df["Requests on-hold"] = pd.to_numeric(df["Requests on-hold"], errors='coerce')
当使用pd.to_numeric
时,您会得到什么?Hi yatu-我已经将收到的错误添加到问题主体中df[“总请求”]
不是pd.Series
??在尝试输入数字之前,请检查df[“Total requests”]的dtypedtype是否为对象
df["Total requests"] = pd.to_numeric(df["Total requests"], errors='coerce')
df["Requests on-hold"] = pd.to_numeric(df["Requests on-hold"], errors='coerce')