我意识到我对标题的措辞并不是最好的,但我希望有一个例子可以解决这个问题。
我如何转换像
这样的列表example_list = ["asdf" , "4", "asdfasdf" , "8" , "9" ,"asdf"]
到像
这样的列表converted_list = ["asdf" , 4, "asdfasdf", 8 , 9 , "asdf"]
所以基本上如何创建一个列表,其中可以转换为整数的字符串转换为整数,而无法转换的字符串保留为字符串?
作为旁注,如果converted_list
中的每个项目都是整数,我将如何在for循环中进行测试?
这个问题的上下文是我试图在可能的情况下将pandas中的头转换为整数,因为所有整数都是现在的字符串。然后如果列有一个带有标题的字符串,我会取列的平均值。现在,我已将所有标题放入列表中。
答案 0 :(得分:6)
您可以使用列表推导与三元组来确定列表中的每个元素是否为数字。
>>> [int(n) if n.isdigit() else n for n in example_list]
['asdf', 4, 'asdfasdf', 8, 9, 'asdf']
答案 1 :(得分:2)
<强>设置强>
example_list = ["asdf" , "4", "asdfasdf" , "8" , "9" ,"asdf"]
df = pd.DataFrame(np.arange(24).reshape(4, 6), columns=example_list)
df
asdf 4 asdfasdf 8 9 asdf
0 0 1 2 3 4 5
1 6 7 8 9 10 11
2 12 13 14 15 16 17
3 18 19 20 21 22 23
转换标题
df.rename(columns={k: int(k) for k in df.columns[df.columns.str.isdigit()]})
asdf 4 asdfasdf 8 9 asdf
0 0 1 2 3 4 5
1 6 7 8 9 10 11
2 12 13 14 15 16 17
3 18 19 20 21 22 23
注意强>
@ Alexander在列表推导中使用字符串方法isdigit
非常有用。我们可以通过与他的结合来改进这个答案。
df.rename(columns={k: int(k) for k in df.columns if k.isdigit()})
查看类型
df.rename(
columns={k: int(k) for k in df.columns[df.columns.str.isdigit()]}
).columns.map(type)
Index([<class 'str'>, <class 'int'>, <class 'str'>, <class 'int'>,
<class 'int'>, <class 'str'>],
dtype='object')