在python中用数字分隔字符串列表中的值

在python中用数字分隔字符串列表中的值,python,python-3.x,dataframe,Python,Python 3.x,Dataframe,或 请帮助我理解以上两种代码之间的区别。虽然前者给出了一个错误的结果(在新列中只给出假值,没有给出真值),但后者对我有效,但只是部分有效。即使使用int(),也不能将True和False分别转换为1和0。如果我理解正确,您希望为条件返回0,为另一个条件返回1,您可以这样做 def int_条件(现有列名称,i): 如果有,则返回1(char.isdigit()表示数据帧_name[现有_column_name][i]中的字符),否则返回0 您编写的前一段代码返回自isdigit()以来的所有0。


请帮助我理解以上两种代码之间的区别。虽然前者给出了一个错误的结果(在新列中只给出假值,没有给出真值),但后者对我有效,但只是部分有效。即使使用int(),也不能将True和False分别转换为1和0。

如果我理解正确,您希望为条件返回0,为另一个条件返回1,您可以这样做

def int_条件(现有列名称,i):
如果有,则返回1(char.isdigit()表示数据帧_name[现有_column_name][i]中的字符),否则返回0

您编写的前一段代码返回自
isdigit()以来的所有0。
仅当文本中的所有字符都是数字时才返回True,而给出结果时,这些数字的大小写可能不是真的

dataframe\u name[现有列\u name]中字符的代码
返回整个dataframe\u name长度上的字符串,而不是相应字符串中的每个字符。因此,
any(char.isdigit()表示数据框名称[现有列名称]中的字符)
返回False和
int(any(char.isdigit()表示数据框名称[现有列名称]中的字符)
返回所有0,因为每个字符串中必须存在除数字以外的字符

后一个代码应该给出正确的值,如
int()
只需将布尔值True和False分别转换为整数1和0。它应该没有理由部分工作,也没有理由不将布尔值转换为数字。我在数据集上运行了相同的代码,它工作正常。它在数据框中形成一个新列,在检查每个字符I后为每次迭代添加一行n每个字符串

或者,要将其分解并更好地理解,您可以先获取1&0的列表,然后将其作为新列添加到数据帧中,而无需在此处使用
int()

for i in range(0, len(data_frame))):
    dataframe_name[new_column_name][i] = int(any(char.isdigit() for char in dataframe_name[existing_column_name][i]))

注意:我总是喜欢并建议使用
tqdm
来跟踪代码的运行。

@AMC我需要形成一个新的列,其中有数字的字符串为“1”,没有数字的字符串为“0”。我的问题是为什么要使用0/1而不是实际的布尔值?因为我有一个任务只要求这样做!什么是
intany
在第一个代码段中?它是int(any)。你确定[i]会在现有列名称之后出现吗?也将它作为函数参数添加到len(dataframe\u name)=10000。为什么我们要添加“i”?它实际上并不总是真的。有些包含数字,而有些不包含数字。
for i in range(0, len(data_frame))):
    dataframe_name[new_column_name][i] = int(any(char.isdigit() for char in dataframe_name[existing_column_name][i]))
digits = []                                            #list to contain 1s & 0s

for i in tqdm(dataframe_name['existing_column_name']): #for strings in each of the rows
    if any(j.isdigit() for j in i):                    #returns True if any of the characters in the string is a digit 
        digits.append('1')
    else:
        digits.append('0')

dataframe_name['new_column_name'] = digits