[英]Python - Ordering Number Values in a List Containing Strings and Numbers
[英]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(),它并没有将True和False分别转换为1和0 。
如果我理解正确,你想为条件返回 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]
返回False和int(any(char.isdigit() for char in dataframe_name[existing_column_name])
返回所有0 s,因为每个字符串中必须存在一些字符除了数字。
后面的代码应该给出正确的值,因为int()
只是将布尔值True和False分别转换为整数1和0 。 应该没有理由让它部分工作并且不将布尔值转换为数字。 我在我的数据集上运行了相同的代码,它运行正常。 在检查每个字符串中的每个字符后,它在 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.