如何在也包含Null值的数据框中找到数字列?

时间:2018-09-29 11:59:31

标签: python python-3.x pandas dataframe

数据框如下:

          col1  col2   col3    col4    col5    col6    col7
points                                                    
x1         0.6  '0'   'first'  0.93   'lion'   0.34   0.98
x2         0.7  '1'  'second'  0.47    'cat'   0.43   0.76
x3         NaN  '0'   'third'  0.87  'tiger'   0.24   0.10
x4         0.6  '0'   'first'  0.93   'lion'   0.34   0.98
x5         0.5  '1'   'first'  0.32     NaN    0.09   NaN
x6         0.4  '0'   'third'  0.78  'tiger'   0.18   0.17
x7         0.5  '1'  'second'  0.98    'cat'   0.47   0.78 

numeric=df.select_dtypes(include=["number"])
others=df.select_dtypes(exclude=["number"])
print(numeric)

output:
          col4   col6
points                                                    
x1        0.93   0.34
x2        0.47   0.43   
x3        0.87   0.24   
x4        0.93   0.34   
x5        0.32   0.09   
x6        0.78   0.18   
x7        0.98   0.47   

但是我需要输出像:

          col1  col4    col6    col7
points                                                    
x1         0.6  0.93    0.34   0.98
x2         0.7  0.47    0.43   0.76
x3         NaN  0.87    0.24   0.10
x4         0.6  0.93    0.34   0.98
x5         0.5  0.32    0.09   NaN
x6         0.4  0.78    0.18   0.17
x7         0.5  0.98    0.47   0.78 

我了解到NaN被视为对象,并且这些列已被移动others。如何甚至根据列中的值检测列?

1 个答案:

答案 0 :(得分:1)

您的问题可以归结为:

  

如何将 meant 的列转换为数字列,但当前具有object dtype。

此问题解决后,pd.DataFrame.select_dtypes将可以正常工作。含义是您事先不知道哪个系列是数字。但是您可以做的是 try 并将列转换为当前具有object dtype的数字。如果找到任何非空值,则可以应用转换。

for col in df.select_dtypes(include=['object']):
    s = pd.to_numeric(df[col], errors='coerce')
    if s.notnull().any():
        df[col] = s

print(df.dtypes)

points     object
col1      float64
col2       object
col3       object
col4      float64
col5       object
col6      float64
col7      float64
dtype: object

该逻辑将适用于您提供的数据。例如,当您有一系列主要由字符串和一些数字组成的字符串时,它将不起作用。在这种情况下,您将需要定义更精确的逻辑,以确定应该将哪个系列视为数字。