Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过拆分可选的前导非字符串字符来计算新列_Python_Pandas_Calculated Columns - Fatal编程技术网

Python 通过拆分可选的前导非字符串字符来计算新列

Python 通过拆分可选的前导非字符串字符来计算新列,python,pandas,calculated-columns,Python,Pandas,Calculated Columns,我是Pandas的新手,正在尝试添加两个新列,其中的值是从现有的“Result”列计算出来的 现有列包括带有可选限定符(“”)的数字 “结果”中的一些样本编号可能是: 0.5 12.67 3 <1 4.5 >10.0 这将产生错误AttributeError:“Series”对象没有属性“isdigit” (在研究了这个错误之后,我尝试了其他一些产生错误的变体 ValueError:序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.al

我是Pandas的新手,正在尝试添加两个新列,其中的值是从现有的“Result”列计算出来的

现有列包括带有可选限定符(“”)的数字

“结果”中的一些样本编号可能是:

0.5
12.67
3
<1
4.5
>10.0
这将产生错误
AttributeError:“Series”对象没有属性“isdigit”

(在研究了这个错误之后,我尝试了其他一些产生错误的变体
ValueError:序列的真值不明确。请使用a.empty、a.bool()、a.item()、a.any()或a.all()

与以下各项一起使用:

备选方案包括:


您可以使用
df.apply
创建新列:

import pandas as pd
df = pd.DataFrame({'result': ['0.5', '12.67', '<1', '4.5', '>10.0']})
df['Result_Q'] = df['result'].apply(lambda x: x[0] if not x[0].isdigit() else None)
print(df)


  result Result_Q
0    0.5     None
1  12.67     None
2     <1        <
3    4.5     None
4  >10.0        >
将熊猫作为pd导入
df=pd.DataFrame({'result':['0.5','12.67','10.0']})
df['Result_Q']=df['Result'].apply(lambda x:x[0],如果不是x[0]。isdigit()否则无)
打印(df)
结果
0.5无
1 12.67无
2     10.0        >
或尝试:

df['Result_Q'] = df['Result'].str.replace('\d+', '').str.strip('.').replace('', np.nan)
print(df)
输出:

  Result Result_Q
0    0.5      NaN
1  12.67      NaN
2      3      NaN
3     <1        <
4    4.5      NaN
5  >10.0        >
结果
0.5纳米
1 12.67南
2 3南
3     10.0        >

这似乎有效。我需要更多地了解它在做什么(作为一名熊猫新手)。它将lambda函数“应用”到“result”列中的每一行。lambda函数的作用与您在“if”中所做的完全相同。@L3n95-如果需要一般解决方案,我建议不要在这里使用
apply
,因为它在
result
列中的
NaN
s失败。如果100%确定从不包含缺少的值,则可以使用它。@jezrael是的,这是正确的,但这不是应用的直接问题,而是lambda中的
If
的问题。使用
np.where()
的此方法对我有效。谢谢我以前也尝试过类似的方法,但我缺少的是使用
.str[0]。str
而不是
。str[0]
。我现在需要回到熊猫的文档中,更好地理解这一点。
df['Result_Q'] = df.Result.str[0].str.extract('(\D)').mask(lambda x: x.isna(), None)
print (df)
  Result Result_Q
0    0.5     None
1  12.67     None
2      3     None
3     <1        <
4    4.5     None
5  >10.0        >
import pandas as pd
df = pd.DataFrame({'result': ['0.5', '12.67', '<1', '4.5', '>10.0']})
df['Result_Q'] = df['result'].apply(lambda x: x[0] if not x[0].isdigit() else None)
print(df)


  result Result_Q
0    0.5     None
1  12.67     None
2     <1        <
3    4.5     None
4  >10.0        >
df['Result_Q'] = df['Result'].str.replace('\d+', '').str.strip('.').replace('', np.nan)
print(df)
  Result Result_Q
0    0.5      NaN
1  12.67      NaN
2      3      NaN
3     <1        <
4    4.5      NaN
5  >10.0        >