熊猫尽可能将字符串转换为数字;否则保留字符串值

Jan*_*anB 2 python string numeric dataframe pandas

我有一个Pandas Dataframe,它的列看起来像这样:

df:

Column0   Column1     Column2
'MSC'       '1'        'R2'
'MIS'       'Tuesday'  '22'
'13'        'Finance'  'Monday'
Run Code Online (Sandbox Code Playgroud)

因此,总的来说,这些列中包含实际字符串,但也包含字符串格式的数字值(整数)。

我发现一篇关于pd.to_numericastype()方法的不错的文章,但是我看不到是否或如何在我的情况下使用它们。

使用方法:

pd.to_numeric(df, errors = 'ignore')
Run Code Online (Sandbox Code Playgroud)

只是导致跳过整个列。除了跳过整个列,我只想跳过那些无法转换的列中的字符串,转到下一个条目并尝试转换下一个字符串。

因此,最后,我的数据框将如下所示:

df:

Column0   Column1     Column2
'MSC'       1          'R2'
'MIS'      'Tuesday'    22
 13        'Finance'  'Monday'
Run Code Online (Sandbox Code Playgroud)

是否有一种有效的方法可以遍历这些列并实现这一目标?

最好的问候,扬

编辑: 感谢您的所有建议!由于我仍然是python初学者,因此@coldspeed和@sacul的答案对我来说更容易理解,因此我将与其中之一一起使用!

cs9*_*s95 6

100%同意这些评论-在性能方面,在列中混合dtypes是一个糟糕的主意。

作为参考,我将使用pd.to_numeric和进行此操作fillna

df2 = df.apply(pd.to_numeric, errors='coerce').fillna(df)
print(df2)
  Column0  Column1 Column2
0     MSC        1      R2
1     MIS  Tuesday      22
2      13  Finance  Monday
Run Code Online (Sandbox Code Playgroud)

列被object强制转换为dtype以防止强制转换。提取时,您会看到以下内容values

print(df2.values.tolist())
[['MSC', 1.0, 'R2'], ['MIS', 'Tuesday', 22.0], [13.0, 'Finance', 'Monday']]
Run Code Online (Sandbox Code Playgroud)