将“单词字符串”和“数字字符串”的列表转换为“数字字符串”转换为仅数字的列表

时间:2017-08-01 17:10:32

标签: python string python-3.x pandas

我意识到我对标题的措辞并不是最好的,但我希望有一个例子可以解决这个问题。

我如何转换像

这样的列表
example_list = ["asdf" , "4", "asdfasdf" , "8" , "9" ,"asdf"]

到像

这样的列表
converted_list = ["asdf" , 4, "asdfasdf", 8 , 9 , "asdf"]

所以基本上如何创建一个列表,其中可以转换为整数的字符串转换为整数,而无法转换的字符串保留为字符串?

作为旁注,如果converted_list中的每个项目都是整数,我将如何在for循环中进行测试?

这个问题的上下文是我试图在可能的情况下将pandas中的头转换为整数,因为所有整数都是现在的字符串。然后如果列有一个带有标题的字符串,我会取列的平均值。现在,我已将所有标题放入列表中。

2 个答案:

答案 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')