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

时间:2020-03-09 17:18:41

标签: python pandas

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

def iaps_or_naps(x):
    if x in ["1","2","3","4","5","6","7","8","9"]:
        return True
    else:
        return False
raw_master['database'] = np.where(iaps_or_naps(raw_master.picture[?][0])==True, 'IAPS', 'NAPS')

我的问题是,如果我只做raw_master.picture[0],它将检查整个字符串的值,这不是我所需要的。我需要第一个角色;但是,如果我执行raw_master.picture[0][0],那将只求整个数据帧第一行的第一个字符。顺便说一句,问号只是意味着我不确定在那放什么。

如何获取它,以便每一行都使用字符串的第一个字符?

非常感谢!

3 个答案:

答案 0 :(得分:4)

您不需要为此编写自己的函数。以这个小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')

答案 1 :(得分:1)

IIUC,您可以使用pd.to_numeric

来测试第一个字符是否为整数。
np.where(pd.to_numeric(df['your_col'].str[0],errors='coerce').isnull(),'IAPS'   
,'NAPS')                                                             #  ^ not a number
  #^ number

答案 2 :(得分:0)

您可以使用诸如apply之类的映射函数,该函数对列中的每个元素进行迭代,以这种方式通过索引[0]访问第一个字符

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