繁体   English   中英

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

[英]Segregating values with numbers in a list of strings in python

dataframe_name[new_column_name] = int(any(char.isdigit() for char in dataframe_name[existing_column_name])

或者

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]))

请帮助我理解上述两个代码之间的区别。 虽然前者给出了错误的结果(它在新列中只给出False而没有给出True值),但后者对我有用,但只是部分。 尽管使用了 int(),它并没有将TrueFalse分别转换为10

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

def int_condition(existing_column_name, i):
  return 1 if any(char.isdigit() for char in dataframe_name[existing_column_name][i]) else 0

您编写的前一个代码返回所有0 s,因为isdigit()仅当文本中的所有字符都是数字时才返回True ,而在给定结果的情况下实际上并非如此。

for char in dataframe_name[existing_column_name]的代码返回dataframe_name整个长度的字符串,而不是相应字符串中的每个字符。 因此, any(char.isdigit() for char in dataframe_name[existing_column_name]返回Falseint(any(char.isdigit() for char in dataframe_name[existing_column_name])返回所有0 s,因为每个字符串中必须存在一些字符除了数字。

后面的代码应该给出正确的值,因为int()只是将布尔值TrueFalse分别转换为整数10 应该没有理由让它部分工作并且不将布尔值转换为数字。 我在我的数据集上运行了相同的代码,它运行正常。 在检查每个字符串中的每个字符后,它在 DataFrame 中形成一个新列,为每次迭代添加一行。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM