Python 查看列表中每个元素的字符串的第一个字符

Python 查看列表中每个元素的字符串的第一个字符,python,pandas,Python,Pandas,我有一个熊猫数据框,有一列叫做“图片”;该列具有以数字或字母开头的值。我要做的是创建一个新列,检查值是否以字母或数字开头,并相应地填充该新列。我使用的是np.where,我的代码如下(raw_master是dataframe,'database'是新列): 我的问题是,如果我只做raw\u master.picture[0],它会检查整个字符串的值,这不是我需要的。我需要第一个字符;但是,如果我执行raw_master.picture[0][0],那么对于整个数据帧,它将只计算为第一行的第一个字

我有一个熊猫数据框,有一列叫做“图片”;该列具有以数字或字母开头的值。我要做的是创建一个新列,检查值是否以字母或数字开头,并相应地填充该新列。我使用的是np.where,我的代码如下(raw_master是dataframe,'database'是新列):

我的问题是,如果我只做
raw\u master.picture[0]
,它会检查整个字符串的值,这不是我需要的。我需要第一个字符;但是,如果我执行
raw_master.picture[0][0]
,那么对于整个数据帧,它将只计算为第一行的第一个字符。顺便说一句,问号的意思是我不知道该放什么

我怎样才能得到它,使它每行取字符串的第一个字符


非常感谢

IIUC您可以使用
pd.to\u numeric

np.where(pd.to_numeric(df['your_col'].str[0],errors='coerce').isnull(),'IAPS'   
,'NAPS')                                                             #  ^ not a number
  #^ number

您不需要为此编写自己的函数。以这个小df为例:

 s = pd.DataFrame(['3asd', 'asd', '3423', 'a123'])
看起来像:

      0
0  3asd
1   asd
2  3423
3  a123
使用熊猫内置:

# checking first column, s[0], first letter, str[0], to see if it is digit.
# if so, assigning IAPS, if not, assigning NAPS
 s['database'] = np.where(s[0].str[0].str.isdigit(), 'IAPS', 'NAPS')
输出:

      0 database
0  3asd     IAPS
1   asd     NAPS
2  3423     IAPS
3  a123     NAPS
将此应用于数据帧:

raw_master['database'] = np.where(raw_master['picture'].str[0].str.isdigit(), 'IAPS', 'NAPS')

您可以使用映射函数,如
apply
,它迭代列中的每个元素,这样就可以通过索引
[0]
访问第一个字符

df['new_col'] = df['picture'].apply(lambda x: 'IAPS' if x[0].str.isdigit() else 'NAPS')

您也不需要在
np.where
中使用
==True
np。其中
计算布尔值,并将传递给它的第一个字符串(
'IAPS'
)指定为如果条件为
True
,则指定的字符串;如果条件为false,则指定第二个字符串
'NAPS'
)。添加
==True
是不必要的评估。谢谢我的朋友!成功了。那么,str[0]部分在做什么?不熟悉那个特殊的语法。它取“picture”行中任何字符串的第一个字符?@BrianWinston完全正确!很乐意帮忙。
df['new_col'] = df['picture'].apply(lambda x: 'IAPS' if x[0].str.isdigit() else 'NAPS')